# Changelog Source: https://ophel.app/docs/changelog All notable changes to Ophel Atlas are documented here. **v1.2.12** **โš ๏ธ Notice โ€” Our GitHub account is still suspended and the appeal is ongoing. Until it is restored, GitHub links (repository, issue tracker) and the online adapter library in the Adapter Center may be unavailable. If you run into any problems, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** **๐Ÿ“ข Notice โ€” ChatGPT's redesigned web interface is now rolling out alongside the old version and is gradually replacing it. This release already adapts to the redesigned pages, but the new interface itself is not yet feature-complete, so in some cases the extension may be unable to retrieve the full conversation outline. If you notice anything off, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** ### ๐Ÿ› Bug Fixes * **ChatGPT redesigned pages adaptation** โ€” Fixed page width, Zen Mode, outline, theme switching, and conversation export on ChatGPT's redesigned pages. ([#971](https://github.com/urzeye/ophel/issues/971), @urzeye, @mrpops2ko) * **DeepSeek outline entry jumping to top** โ€” Fixed an issue on DeepSeek where, after sending several messages without refreshing the page, clicking a message in the outline could suddenly move it to the top of the outline list. ([#972](https://github.com/urzeye/ophel/issues/972)) * **Export jumping to the top** โ€” Fixed an issue where exporting a conversation on DeepSeek, Claude, Grok, or AI Studio scrolled the page to the top first; the complete conversation is now fetched directly without moving the page. ([#973](https://github.com/urzeye/ophel/issues/973)) **v1.2.11** **โš ๏ธ Notice โ€” Our GitHub account has been temporarily suspended in error, and we are actively appealing. Until it is restored, GitHub links (repository, issue tracker) and the online adapter library in the Adapter Center may be unavailable. If you run into any problems, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** **๐Ÿ“ข Notice โ€” ChatGPT is currently rolling out a major web redesign to select accounts, significantly restructuring the sidebar history, composer, and chat layout, which causes the extension's existing selectors to stop functioning. As none of our developer accounts have received this rollout yet, dynamic interactions cannot be tested and full adaptation is temporarily blocked until our accounts receive the update, ChatGPT rolls it out globally, or a community member can grant temporary account access for debugging. If you have a test account on the new interface and are willing to assist, please reach out to us on [Discord](https://discord.gg/rmPzb6Cx9u).** ### โœจ Improvements * **Chats tab improvements** โ€” Improved filters, search, batch actions, and drag-and-drop reordering in conversation management. ([#965](https://github.com/urzeye/ophel/issues/965)) * **Outline tab improvements** โ€” The level slider now supports drag adjustment, the toolbar automatically compacts on narrow panels, row alignment is improved, and the export button shimmer stops after the first click. ([#966](https://github.com/urzeye/ophel/issues/966)) * **Prompts tab improvements** โ€” Improved category filtering, variable tags, and empty-state guidance for prompts. ([#967](https://github.com/urzeye/ophel/issues/967)) ### ๐Ÿ› Bug Fixes * **Attachment-only questions missing from outline and export** โ€” Fixed an issue where questions containing only images or files were missing from the outline on DeepSeek and Claude, or omitted from AI Studio exports; the outline now shows the attachment file name and exports include the attachments. ([#970](https://github.com/urzeye/ophel/issues/970)) **v1.2.10** **โš ๏ธ Notice โ€” Our GitHub account has been temporarily suspended in error, and we are actively appealing. Until it is restored, GitHub links (repository, issue tracker) and the online adapter library in the Adapter Center may be unavailable. If you run into any problems, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** **๐Ÿ“ข Notice โ€” ChatGPT is currently rolling out a major web redesign to select accounts, significantly restructuring the sidebar history, composer, and chat layout, which causes the extension's existing selectors to stop functioning. As none of our developer accounts have received this rollout yet, dynamic interactions cannot be tested and full adaptation is temporarily blocked until our accounts receive the update, ChatGPT rolls it out globally, or a community member can grant temporary account access for debugging. If you have a test account on the new interface and are willing to assist, please reach out to us on [Discord](https://discord.gg/rmPzb6Cx9u).** ### โœจ Improvements * **AI Studio and Grok long conversation outline, export, and reading history** โ€” Outline headings in long conversations now stay complete while scrolling and jump accurately when clicked; exporting captures the full conversation at once without scrolling, keeping reasoning, attachments, and images; refreshing returns you to where you left off reading. ([#962](https://github.com/urzeye/ophel/issues/962), [#963](https://github.com/urzeye/ophel/issues/963)) * **Switch conversations without reloading** โ€” Switching between conversations from the Chats tab now happens in place instead of reloading the entire page, jumping faster while keeping your reading state. ([#960](https://github.com/urzeye/ophel/issues/960)) * **Hide quick buttons when panel is open** โ€” "Hide quick buttons when panel is open" is now enabled by default, automatically hiding the floating button group when the main panel expands to keep the screen uncluttered and restoring them when collapsed. ([#964](https://github.com/urzeye/ophel/issues/964)) ### ๐Ÿ› Bug Fixes * **Grok user questions missing** โ€” Adapted to Grok's redesigned conversation page; user questions appear in the outline again, and copying outline or exporting conversations includes complete questions and replies. ([#961](https://github.com/urzeye/ophel/issues/961)) * **Grok sync with collapsed sidebar** โ€” Fixed an issue where syncing conversations while Grok's sidebar was collapsed reported no conversations detected; the sidebar is now automatically expanded during sync. ([#963](https://github.com/urzeye/ophel/issues/963)) * **Gemini auto-hide input** โ€” Adapted to Gemini's new page structure; the "Auto-hide Input" feature is restored, collapsing the input box when idle and bringing it back when the cursor nears the bottom or the input is focused. ([#959](https://github.com/urzeye/ophel/issues/959)) **v1.2.9** ### โœจ Improvements * **Claude, DeepSeek outline, export and reading history** โ€” Reply headings in long conversations stay complete while scrolling and jump accurately when clicked, exporting no longer requires scrolling page-by-page while keeping reasoning, formulas, and code intact, and refreshing now returns to where you left off reading. ([#953](https://github.com/urzeye/ophel/issues/953), [#954](https://github.com/urzeye/ophel/issues/954)) * **Long conversation and streaming performance** โ€” Reduced background scans and repeated calculations during long conversations and live AI replies across all sites, easing stutter when scrolling and typing. ([#947](https://github.com/urzeye/ophel/issues/947)) * **Claude document canvas and Artifacts panel avoidance** โ€” When a document canvas preview or the Artifacts file panel is open on Claude, the Ophel panel no longer covers them; content now shifts aside so titles, close buttons, and file lists stay fully visible and clickable. ([#956](https://github.com/urzeye/ophel/issues/956)) * **DeepSeek document preview and Canvas avoidance** โ€” When a document preview or Canvas preview panel is open on DeepSeek, the Ophel panel no longer covers it; preview content now shifts aside so the title, close button, and content stay fully visible and clickable. ([#958](https://github.com/urzeye/ophel/issues/958)) * **Scroll to top and quick jumps** โ€” On sites where conversations are already fully loaded locally (e.g. DeepSeek, Doubao, Claude), "Scroll to Top" now finishes immediately without unnecessary history checks; clicking "Return to Anchor" or "Scroll to Bottom" right after "Scroll to Top" also responds immediately instead of ignoring the click. ([#948](https://github.com/urzeye/ophel/issues/948)) ### ๐Ÿ› Bug Fixes * **"Show User Queries" toggle** โ€” Fixed an issue on pages without user questions where the toggle showed an incorrect state and appeared unresponsive; it now always reflects its true state and updates immediately. ([#951](https://github.com/urzeye/ophel/issues/951)) * **Outline stuck expanded after locate** โ€” Fixed an issue where temporarily expanding the outline via "Locate Current" remained stuck open; it now reliably returns to its collapsed state once highlighting ends. ([#952](https://github.com/urzeye/ophel/issues/952)) * **Z.ai clean mode overseas** โ€” Fixed an issue where enabling clean mode or zen mode on Z.ai from outside China caused the chat area to disappear, leaving a blank page; page content now displays normally. ([#955](https://github.com/urzeye/ophel/issues/955)) **v1.2.8** **โš ๏ธ Notice โ€” Our GitHub account has been temporarily suspended in error, and we are actively appealing. Until it is restored, GitHub links (repository, issue tracker) and the online adapter library in the Adapter Center may be unavailable. If you run into any problems, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** **๐Ÿ“ข Notice โ€” ChatGPT is currently rolling out a major web redesign to select accounts, significantly restructuring the sidebar history, composer, and chat layout, which causes the extension's existing selectors to stop functioning. As none of our developer accounts have received this rollout yet, dynamic interactions cannot be tested and full adaptation is temporarily blocked until our accounts receive the update, ChatGPT rolls it out globally, or a community member can grant temporary account access for debugging. If you have a test account on the new interface and are willing to assist, please reach out to us on [Discord](https://discord.gg/rmPzb6Cx9u).** ### ๐Ÿš€ New Features * **Auto-hide input (Gemini)** โ€” Added an "Auto-hide Input" toggle under Site Settings for Gemini. The chat input box floats as an overlay and slides away when idle, letting conversations use the freed space; it reappears when the pointer approaches the bottom, on prompt insertion, or via the focus shortcut (`Alt + I`). ([#930](https://github.com/urzeye/ophel/issues/930)) * **Doubao page theme sync** โ€” Doubao now supports bidirectional theme synchronization with Ophel and native page theme switches across light, dark, and system appearance preferences, keeping the page, input box, and panel in full sync. ([#932](https://github.com/urzeye/ophel/issues/932)) ### โœจ Improvements * **Export button in the outline tab** โ€” The outline toolbar now includes a highlighted Export button that opens the export dialog in one click, instead of going through the toolbox or a conversation's menu; Copy Outline now lives inside the export dialog next to Copy Markdown. ([#936](https://github.com/urzeye/ophel/issues/936)) * **Full user questions in Copy Outline** โ€” Copy Outline now copies the complete text of every user question instead of a truncated preview, so long questions are no longer cut off and the result matches copying a single outline item. ([#939](https://github.com/urzeye/ophel/issues/939)) * **Auto Snap panel accidental triggers and flickering at screen edges** โ€” The panel now slides out only after the pointer pauses briefly on the edge handle or trigger zone, so quick sweeps across the edge or over to another monitor no longer pop it open; when the pointer leaves the window on the snapped side, the panel also stays open briefly instead of repeatedly popping out and collapsing. ([#937](https://github.com/urzeye/ophel/issues/937)) * **Tools menu covered by the panel** โ€” Fixed Auto Snap panel mode making the panel slide out and cover the quick toolbar's tools menu when clicking its icon; the menu now also stays above the expanded panel while open, so it remains clickable at any toolbar position. ([#934](https://github.com/urzeye/ophel/issues/934)) * **Single tab display and layout protection** โ€” The panel now automatically hides the top tab bar when only a single feature is enabled (such as outline-only mode or capability-restricted sites), reclaiming \~38px of vertical space; the layout settings also require at least one tab to remain enabled, preventing empty panel states. ([#940](https://github.com/urzeye/ophel/issues/940)) * **Clean Mode bottom spacing** โ€” In Clean Mode, AI generation and legal disclaimers under the input box are now hidden while preserving their native DOM flow spacing, keeping the input area at the site's original intended height instead of sticking to the bottom edge. ([#929](https://github.com/urzeye/ophel/issues/929)) * **ChatGPT outline performance in long conversations** โ€” Optimized heading sync and index calculation during long conversations, eliminating repeated full-tree DOM queries and reducing main thread lag during outline refreshes. ([#935](https://github.com/urzeye/ophel/issues/935)) * **Prompt insert and clear performance in long conversations** โ€” Optimized routine background checks on long-conversation pages such as ChatGPT, eliminating repeated full-page scans; inserting and clearing prompts now respond instantly instead of stalling for seconds. ([#942](https://github.com/urzeye/ophel/issues/942)) ### ๐Ÿ› Bug Fixes * **ChatGPT outline order in long chats** โ€” Fixed an issue where scrolling through long ChatGPT conversations could cause reply headings to be grouped under the wrong question or jump out of order in the outline. ([#935](https://github.com/urzeye/ophel/issues/935)) * **Zen Mode and Clean Mode state isolation** โ€” Fixed an issue where enabling Zen Mode automatically enabled Clean Mode and left it active after exiting, now preserving your original Clean Mode preference. ([#926](https://github.com/urzeye/ophel/issues/926)) * **Pinned conversations on Doubao and DeepSeek** โ€” Fixed pinned chats no longer being recognized after both sites redesigned their sidebars, so pinned status syncs correctly in Conversation Manager again. ([#933](https://github.com/urzeye/ophel/issues/933)) * **Gemini Canvas and Deep Research export** โ€” Adapted to Gemini's new inline Canvas preview and Deep Research layout, resolving issues where Canvas export could fail on first attempt, misalign versions across multi-turn chats, or extract empty code. ([#941](https://github.com/urzeye/ophel/issues/941)) * **ChatGPT conversations disappearing in the Conversations tab** โ€” Fixed an issue where conversations could disappear and show empty folders after switching tabs or pinning a chat on ChatGPT, and resolved active sync failing to restore the list. ([#943](https://github.com/urzeye/ophel/issues/943)) **v1.2.7** **โš ๏ธ Notice โ€” Our GitHub account has been temporarily suspended in error, and we are actively appealing. Until it is restored, GitHub links (repository, issue tracker) and the online adapter library in the Adapter Center may be unavailable. If you run into any problems, please let us know on [Discord](https://discord.gg/rmPzb6Cx9u).** ### ๐Ÿš€ New Features * **Site toggle** โ€” You can now individually disable any built-in site or site pack from the Adapter Center, on-page settings, or extension popup to stop Ophel from loading on that site. ([#908](https://github.com/urzeye/ophel/issues/908)) * **Cross-site conversation search** โ€” Global search now also matches conversations from other supported sites; results show the site icon and an "External" badge, and clicking one opens it in a new tab. ([#888](https://github.com/urzeye/ophel/issues/888)) * **Gemini Spark conversation sync** โ€” Task threads in Gemini Spark (gemini.google.com/spark) now sync into Conversation Manager, including pinned state; clicking a synced thread opens it. ([#902](https://github.com/urzeye/ophel/issues/902)) ### โœจ Improvements * **Long conversation and streaming performance** โ€” Optimized background calculations and DOM scanning across Gemini and other supported sites during long conversations, continuous streaming responses, and scrolling, reducing stutter and frame drops. * **Export style** โ€” New "Export Style" setting (also selectable per export in the export dialog) with a Clean option that removes decorative emojis from exported files; Prompt Queue and export text now fully follow the selected interface language. * **Update notifications** โ€” Version updates no longer pop up the full-screen changelog. A one-time corner toast appears instead, and a red dot on the panel logo previews highlights on hover and opens the full notes on click. ([#887](https://github.com/urzeye/ophel/issues/887)) * **Tooltips** โ€” Tooltips now flip near screen edges and dismiss on click or Esc; list-item hints only appear when the title is truncated, so they no longer cover neighboring content. ([#885](https://github.com/urzeye/ophel/issues/885)) * **Popup Quick Access for multi-entry sites** โ€” Sites with multiple domains (like Kimi's kimi.com and kimi.ai) now take a single tile in the popup Quick Access grid; you can switch entries, and the last choice is remembered. ([#895](https://github.com/urzeye/ophel/issues/895)) * **Site Packs entry in feature tips** โ€” "Site Packs" in the outline feature tips is now a clickable link that opens Settings โ†’ Site Packs on the online library. * **Header drag hint** โ€” The passthrough-mode hint now appears only after holding the header, so it no longer flashes over the title when clicking or dragging the panel. * **Claude Key switching** โ€” Switching Session Keys now only reloads the requesting Claude tab rather than all open Claude tabs, preserving active drafts and sessions in other tabs. ### ๐Ÿ› Bug Fixes * **Gemini sidebar adaptation** โ€” Adapted to Gemini's new sidebar structure, so the conversation list loads again in Conversation Manager and Global Search. * **Prompt Queue overlay covering site dialogs** โ€” Fixed the floating queue capsule and panel covering sites' own dialogs and popups; the overlay now hides while a native dialog is open and reappears once it closes. * **ChatGPT in-page bookmark icons** โ€” Fixed in-page bookmarks repeatedly expanding ChatGPT question text in long conversations, which could drive up tab memory usage. ([#889](https://github.com/urzeye/ophel/issues/889)) * **Kimi international site** โ€” The extension now recognizes kimi.ai, so outline, export, Zen Mode, and other Kimi features work on both kimi.ai and kimi.com. ([#890](https://github.com/urzeye/ophel/issues/890)) * **Popup language setting** โ€” Fixed the extension popup always showing the browser language; it now follows the interface language in Settings. ([#897](https://github.com/urzeye/ophel/issues/897)) * **DeepSeek thinking block outline** โ€” Fixed issue where DeepSeek R1 reasoning/thinking blocks during streaming were incorrectly recognized as user queries, causing outline flickering. * **Outline word count overflow** โ€” Fixed issue across ChatGPT, Claude, Gemini, Grok, and Z.ai where section word counts incorrectly accumulated across subsequent conversation turns. * **Grok prompt insertion** โ€” Fixed issue where prompts containing `<`, `>`, or `&` were parsed as raw HTML or discarded, and preserved multiline paragraph formatting in Grok. * **Prompt drag sorting** โ€” Fixed drag sorting being unavailable in the prompt library; reordering now works under any platform filter, and stays disabled only in the "Recent" view and during search. **v1.2.6** ### ๐Ÿš€ New Features * **Perplexity support** โ€” The online adapter library now includes Perplexity ([www.perplexity.ai](http://www.perplexity.ai)); installing the pack enables outlines with user queries, basic export, chat width, Zen Mode, new chat, prompt insertion, and theme sync on conversation pages. * **Baidu Wenxin support** โ€” The online adapter library now includes Baidu Wenxin (wenxin.baidu.com); installing the pack enables outlines with user queries, basic export, chat width, Zen Mode, new chat, and prompt insertion on conversations page. ### ๐Ÿ› Bug Fixes * **Claude Incognito chat adaptation** โ€” Fixed conversation export and copy failing with "Conversation not found" in Claude Incognito chats (claude.ai/new?incognito=); the export file is titled from the first user message, and smart panel avoidance now works on Incognito pages. ([#879](https://github.com/urzeye/ophel/issues/879)) **v1.2.5** ### ๐Ÿš€ New Features * **Notion AI support** โ€” The online adapter library now includes Notion AI (app.notion.com); installing the pack enables outlines with user queries, basic export, chat width, Zen Mode, new chat, and prompt insertion on conversations and shared pages.([#873](https://github.com/urzeye/ophel/issues/873)) * **Zhihu Zhida support** โ€” The online adapter library now includes Zhihu Zhida (zhida.zhihu.com); installing the pack enables outlines with user queries, basic export, chat width, Zen Mode, new chat, and prompt insertion on conversations and shared pages. * **ChatGPT long conversation performance** โ€” ChatGPT site settings now include three rendering optimizations: code block batch mount (on by default; batches code editor mounting when opening or switching long conversations to reduce page freezes), streaming render optimization (on by default; pauses message-area animations while a response is being generated), and an optional backdrop blur toggle that reduces scroll frame drops at the cost of a slight visual change. ([#868](https://github.com/urzeye/ophel/issues/868)) ### โœจ Improvements * **Site Pack icons** โ€” Adapter packs can now declare a custom icon image, so sites like Notion AI whose icon is not served at the default favicon path show their real logo instead of a letter placeholder. ### ๐Ÿ› Bug Fixes * **Adapt to ChatGPT's new DOM structure** โ€” Adapted to ChatGPT's redesigned prompt rail and off-screen placeholder turns, fixing missing user questions in the outline after refresh and restoring complete turn collection during long conversation export. ([#871](https://github.com/urzeye/ophel/issues/871), [#872](https://github.com/urzeye/ophel/issues/872)) * **Long conversation and asset export reliability** โ€” Virtual-scroll exports for ChatGPT, Doubao, DeepSeek, and AI Studio now wait for rows to mount, verify turn continuity, and fill missing segments to prevent skipped, duplicated, or unordered messages; incomplete exports now show clear notices, and stuck image downloads in ZIP export gracefully degrade to external links without stalling. ([#865](https://github.com/urzeye/ophel/issues/865)) * **Doubao new input box adaptation** โ€” Prompt insertion, queued send, generation stop detection, and model lock now work with Doubao's redesigned TipTap input box and the updated send/stop/model-switch controls. ([#867](https://github.com/urzeye/ophel/issues/867)) **v1.2.4** ### ๐Ÿš€ New Features * **Interactive export dialog** โ€” The export button and the conversation list export menu now open a unified options dialog: pick the format (Markdown / HTML / JSON / TXT / Copy Markdown), toggle thought inclusion and turn numbering, customize the Markdown divider, package as ZIP, or jump to segmented export; a new "Show Export Options Dialog" setting restores one-click export when turned off. ([#841](https://github.com/urzeye/ophel/issues/841)) * **HTML export** โ€” Conversations can now be exported as a single self-contained HTML file with responsive layout, light/dark/auto theme switching, syntax-highlighted code blocks with copy buttons, native MathML formulas, a collapsible "Thinking process" section, and light-theme printing. ([#856](https://github.com/urzeye/ophel/issues/856), @Piracola) * **Default export format** โ€” Added a "Default Export Format" setting, so the export shortcut and quick export use a preferred format (Markdown / JSON / TXT / HTML) instead of always Markdown. ([#856](https://github.com/urzeye/ophel/issues/856), @Piracola) * **Site Pack document outline support** โ€” Declarative Site Packs now support document outline navigation (`document-outline` capability and `documentOutline` config), enabling multi-source "Document" tab outlines and scroll navigation for Canvas, Artifacts, and standalone research reports on adapted sites. * **Manus support** โ€” The online adapter library now includes Manus (manus.im); installing the pack enables outlines with user queries, basic export, chat width, Zen Mode, Clean Mode, new chat, and prompt insertion on conversations and shared pages. ### โœจ Improvements * **Thought block consolidation and duplicate title cleanup** โ€” The export pipeline now automatically merges consecutive thought fragments into a single unified blockquote and safely combines consecutive pure-thought assistant turns (including multi-fragment chains), preventing duplicate model headings across adapted sites; segmented exports are cleaned up the same way. ([#841](https://github.com/urzeye/ophel/issues/841)) **v1.2.3** ### ๐Ÿš€ New Features * **Proton Lumo support** โ€” The online adapter library now includes Proton Lumo (lumo.proton.me); installing the pack enables outlines with user queries, basic export, generation detection and stop, chat width, Zen Mode, Clean Mode, new chat, and prompt insertion. * **Genspark support** โ€” The online adapter library now includes Genspark (genspark.ai); installing the pack enables outlines with user queries, basic export, generation detection and stop, chat width, Zen Mode, new chat, prompt insertion, and Clean Mode. ([#851](https://github.com/urzeye/ophel/issues/851)) ### โœจ Improvements * **Settings and panel visual experience polish** โ€” Settings pages now feature sticky tab bars with backdrop blur; the Backup page is redesigned into a clean tabbed layout for local and WebDAV options; Permissions and Shortcuts pages now use crisp SVG icons and keyboard badges; and prompt action buttons along with UI components across all 24 themes now have refined visual hierarchy and contrast. ### ๐Ÿ› Bug Fixes * **Gemini image package download** โ€” Fixed an issue where ZIP exports from Gemini share pages or multi-account sessions could miss images, by using pictures already shown on the page when downloading them fails. ([#814](https://github.com/urzeye/ophel/issues/814)) **v1.2.2** ### ๐Ÿš€ New Features * **StepFun support** โ€” The online adapter library now includes StepFun (chat.stepfun.com); installing the pack enables outlines with user queries, basic export, generation detection and stop, chat width, Zen Mode, new chat, and prompt insertion on conversations and shared pages. ([#839](https://github.com/urzeye/ophel/issues/839), [#792](https://github.com/urzeye/ophel/issues/792), [#352](https://github.com/urzeye/ophel/issues/352)) ### ๐Ÿ› Bug Fixes * **Outline anchor position lost** โ€” Fixed issue where quickly or repeatedly clicking "Return to Anchor", "Go to Top", "Go to Bottom", or clicking the same outline heading twice collapsed the saved anchor onto the current position, so "Return to Anchor" could no longer jump back to the previous location; anchor operations are now serialized, and the anchor is preserved when the target is already reached. ([#848](https://github.com/urzeye/ophel/issues/848)) * **Adapt to Claude's new page layout** โ€” Claude updated the page structure again, **Fuck you, Claude!** ([#823](https://github.com/urzeye/ophel/issues/823), [#849](https://github.com/urzeye/ophel/issues/849)) * **Doubao conversation title sync** โ€” Fixed issue where conversations synced from Doubao showed their titles repeated three times (e.g. a title became "titletitletitle") after the site rolled out its new sidebar conversation list; titles are now read correctly from the new structure. ([#846](https://github.com/urzeye/ophel/issues/846)) * **Qwen Studio scroll shortcuts** โ€” Adapted to Qwen Studio's new chat scroll container, fixing "Go to Top", "Go to Bottom", and "Return to Anchor" failing after the site updated its page structure. * **Adapt to Grok's new DOM structure** โ€” Adapt to Grok's new chat scroll container and theme style selector, and fix the problem of "Go to Top", "Go to Bottom" and "Return to Anchor" on Grok failing and switching between light/dark themes causing the page to freeze and become unresponsive. ([#842](https://github.com/urzeye/ophel/issues/842), [#843](https://github.com/urzeye/ophel/issues/843)) * **ChatGLM theme switching** โ€” Adapted to ChatGLM's new theme popover structure, fixing light/dark/system theme switching that failed after the site moved the options into a hidden popover the old two-step menu navigation couldn't reach. * **ChatGPT prompt insertion on Firefox** โ€” Fixed issue where inserting a multi-line prompt into ChatGPT in Firefox lost all line breaks; inserted prompts now keep their original line structure. ([#811](https://github.com/urzeye/ophel/issues/811), [#838](https://github.com/urzeye/ophel/issues/838)) * **AI Studio theme toggle** โ€” Fixed issue where toggling light/dark theme on AI Studio no longer changed the site theme and the stored preference was never updated; the page theme now follows the panel toggle again. ([#844](https://github.com/urzeye/ophel/issues/844)) * **DeepSeek Harness steering messages** โ€” Fixed issue where steering instructions sent while a response was generating were missing from the outline and exports on DeepSeek Harness; these messages are now recognized as user queries. **v1.2.1** ### ๐Ÿš€ New Features * **DeepSeek Harness support** โ€” The online adapter library now includes DeepSeek Harness; install the pack and bind it to your self-hosted instance's domain to enable outlines with user queries, basic export, generation detection and stop, chat width, Zen Mode, prompt insertion, and reading history. ([#825](https://github.com/urzeye/ophel/issues/825)) * **OpenCode Share support** โ€” The online adapter library now includes OpenCode Share (opncd.ai); installing the pack enables outlines with user query detection and basic export for shared OpenCode conversations. ([#800](https://github.com/urzeye/ophel/issues/800)) * **LongCat AI support** โ€” The online adapter library now includes LongCat AI (longcat.chat); installing the pack enables outlines with user queries, export, generation detection and stop, page width, Zen Mode, new chat, and prompt insertion on the site. * **HTTP self-hosted sites** โ€” Site Packs can now be bound to HTTP origins such as `http://192.168.1.10:3000`, so a self-hosted AI site that is not served over HTTPS can still be adapted; the in-page adapter wizard and local pack import accept HTTP origins as well. ### โœจ Improvements * **Site packs auto update check** โ€” Opening Settings -> Site Packs -> "Get & Updates" now automatically checks for adapter updates once, so first-time users see the online library right away instead of an empty list. ([#821](https://github.com/urzeye/ophel/issues/821)) * **Site pack outline exclusion** โ€” Site Packs can now declare containers to exclude from outline extraction, so reasoning or thinking sections no longer pollute the outline with draft headings. ([#800](https://github.com/urzeye/ophel/issues/800)) ### ๐Ÿ› Bug Fixes * **Claude new layout adaptation** โ€” Adapted to Claude.ai's new DOM structure: updated sidebar conversation list, send button, generation detection, Zen Mode, and panel avoidance selectors, and fixed issue where pinning and then unpinning a conversation showed its title twice in the conversation manager. ๏ผˆ[#834](https://github.com/urzeye/ophel/issues/834) @urzeye, [#820](https://github.com/urzeye/ophel/issues/820) @crazyn2๏ผ‰ * **ChatGPT page redesign adaptation** โ€” Fixed issues caused by ChatGPT's page redesign: conversations could be scanned but not added to the conversation list, the "ChatGPT can make mistakes" disclaimer stayed visible in Clean Mode, and double-clicking LaTeX formulas reported missing source; sidebar chat links and formula sources are now read from the redesigned structure. * **Userscript adapter library updates** โ€” Fixed issue where the userscript version kept showing an outdated online adapter library (for up to a week) because the browser cached the CDN response; update checks now always fetch the latest index. * **Site pack forward-compatible fields** โ€” The registry PR validator now tolerates schema-declared fields at any nesting level when base code has not yet learned them, so a new selector or config sub-field can ship in the same PR as the pack that uses it instead of splitting into two separate PRs. ([#800](https://github.com/urzeye/ophel/issues/800)) * **Hidden conversations recovery** โ€” Fixed issue where some conversations stayed invisible in the conversation list even after re-syncing (their folder had been removed earlier); upgrading now automatically moves such conversations back to the inbox. * **Site pack prompt insertion** โ€” Fixed issue where inserting a multi-line prompt into a site's rich text input box (such as LongCat AI) showed an "Insert failed" toast even though the text had been inserted correctly. **v1.2.0** ### ๐Ÿš€ New Features * **Site packs** โ€” Added a "Site Packs" section in settings for installing adapter packs from the online library, extending Ophel to more AI sites (self-hosted instances can be enabled by binding a custom domain); built-in site adapters can now be fixed via cloud updates instead of waiting for the next extension release. ([#809](https://github.com/urzeye/ophel/issues/809)) **v1.1.8** ### ๐Ÿš€ New Features * **Prompt platform filter** โ€” Prompts now support optional platform assignment (e.g., ChatGPT, Gemini, Claude) via the editor dialog; a new globe icon in the category bar opens a multi-select filter popover with a badge count, so users can quickly narrow prompts to those relevant for a specific platform. ([#802](https://github.com/urzeye/ophel/issues/802)) ### โœจ Improvements * **Prompt queue overlay z-index** โ€” Lowered the queue capsule and panel z-index from 99998/99999 to 9998/9999 so the floating bar no longer blocks the main panel, magic codex viewer, and import/preview dialogs. ### ๐Ÿ› Bug Fixes * **Prompt variable multiline input** โ€” Fixed issue where pasting multi-line Markdown into a prompt variable collapsed it onto a single line because the input was single-line; variable text fields now use an auto-resizing box that stays compact for short values and grows to preserve line breaks and formatting for long content. ([#801](https://github.com/urzeye/ophel/issues/801)) - **ChatGPT panel avoidance input width** โ€” Fixed issue where the smart avoidance feature caused ChatGPT's input box to become excessively narrow after the site's 2026 redesign. - **Doubao Zen Mode sidebar** โ€” Fixed issue where enabling Zen Mode on Doubao left a visible sidebar placeholder because the old DOM selector no longer matched the updated sidebar structure; added the new container selector so the sidebar collapses completely. ([#806](https://github.com/urzeye/ophel/issues/806)) **v1.1.7** ### โœจ Improvements * **Reading history restoration controls** โ€” Automatic reading-position restoration now yields immediately when scrolling or selecting an outline item, so user navigation always takes priority and the selected position is preserved. ([#797](https://github.com/urzeye/ophel/issues/797)) ### ๐Ÿ› Bug Fixes * **Claude outline refresh after replies** โ€” Fixed issue where sending a new message in a previously indexed long Claude conversation could restart the full outline scan and scroll through the conversation again; new replies now update the cached outline incrementally. ([#785](https://github.com/urzeye/ophel/issues/785)) * **Claude outline current-position highlight** โ€” Fixed issue where the outline could highlight an earlier question when the visible Claude question began with the same text; current-position tracking now follows the exact question at that conversation position. **v1.1.6** ### โœจ Improvements * **Claude page structure adaptation** โ€” Adapted to Claude's updated conversation page DOM, ensuring the outline can read all messages and conversation exports remain complete. ([#781](https://github.com/urzeye/ophel/issues/781)) ### ๐Ÿ› Bug Fixes * **Claude Canvas document export** โ€” Fixed issue where Markdown and clipboard exports could omit Claude Canvas document content; exports now collect Canvas documents from the conversation, including virtualized messages, and restore the previously open Canvas afterward. * **Claude Canvas Smart Avoidance** โ€” Fixed issue where opening a Claude Canvas document could stop Smart Avoidance from reserving space for the Ophel panel, causing the document content to be covered. * **Global shortcut URL** โ€” Fixed issue where the global shortcut continued to open Gemini after setting a custom URL. ([#778](https://github.com/urzeye/ophel/issues/778)) **v1.1.5** ### ๐Ÿš€ New Features * **Edge-snap trigger style** โ€” Automatic edge-snap mode now lets you choose between the visible edge handle and a hidden edge hot zone, keeping the collapsed panel cleaner while still opening it from the screen edge. ([#770](https://github.com/urzeye/ophel/issues/770)) * **Prompt order shortcuts** โ€” Prompt menus now include Move up and Move down, making it easier to organize prompts when drag-and-drop is inconvenient. ([#774](https://github.com/urzeye/ophel/issues/774)) ### ๐Ÿ› Bug Fixes * **Doubao user questions** โ€” Fixed issue where Doubao's updated chat bubble markup could prevent newer user questions from being recognized in the outline, Markdown rendering, export, and related features while keeping older conversations compatible. ([#771](https://github.com/urzeye/ophel/issues/771)) **v1.1.4** ### ๐Ÿš€ New Features * **Panel tab reordering** โ€” Outline, Conversations, and Prompts tabs can now be reordered directly from the panel, keeping the same order in Settings without opening the options page first. ([#764](https://github.com/urzeye/ophel/issues/764)) * **Panel width controls** โ€” Floating panels now support edge-drag resizing and an optional Beta hover-widening mode; related settings stay under Panel Width, are searchable in Search Everywhere, and avoid page-avoidance jumps while temporarily widening. ([#763](https://github.com/urzeye/ophel/issues/763)) ### โœจ Improvements * **Smart panel-aware layout** โ€” Smart Avoidance now covers more new chat, Canvas, side-panel, and file-view layouts, keeping page content, input boxes, and native panels aligned with the available safe area while the Ophel floating panel is open. ([#761](https://github.com/urzeye/ophel/issues/761)) ### ๐Ÿ› Bug Fixes * **Kimi conversation sync** โ€” Fixed issue where Kimi's updated sidebar layout could prevent new or recent chats from appearing in Conversations sync. ([#759](https://github.com/urzeye/ophel/issues/759)) **v1.1.3** ### ๐Ÿš€ New Features * **Smart panel-aware layout** โ€” Added beta Smart Avoidance for All Platforms, so supported sites recalculate their chat safe area while the Ophel floating panel is open and keep messages, code blocks, and input boxes out from under the panel when pages are widened or browser windows are narrow. ([#744](https://github.com/urzeye/ophel/issues/744), [#752](https://github.com/urzeye/ophel/issues/752)) - **Italian language support** โ€” Ophel Atlas now supports Italian for the interface, extension metadata, and userscript resources, so Italian users can use the panel and settings in their language. ### โœจ Improvements * **Main panel toolbars and quick buttons** โ€” Unified Outline, Prompts, and Conversations toolbar/search styling and tuned quick-button feedback, so high-frequency controls are clearer across themes. * **Settings and theme management UI** โ€” Refreshed the settings sidebar, theme preset cards, custom style list, and style editor so navigation reads more clearly and theme choices are easier to scan. ([#749](https://github.com/urzeye/ophel/issues/749)) * **Panel header and tabs** โ€” Polished the panel header, drag hint, and tab bar styling to reduce visual noise and keep controls aligned with the rest of the interface. ([#749](https://github.com/urzeye/ophel/issues/749)) * **Prompt preview category tags** โ€” Prompt previews now show the category as a colored tag matching the prompt category color, with a clearer preview header and content layout. ### ๐Ÿ› Bug Fixes * **Custom tab title formats** โ€” Fixed issue where Qianwen and Z.ai could reuse an already-renamed browser tab title after switching conversations, preventing duplicated title or model fragments when custom tab formats include `{model}`. * **Claude userscript export** โ€” Fixed issue where exporting Claude conversations with thinking blocks could fail in userscript mode while preparing the page for export. * **Kimi Zen Mode** โ€” Fixed issue where Zen Mode no longer hid Kimi's sidebar after the site updated its page layout. **v1.1.2** ### ๐Ÿš€ New Features * **Gemini Canvas document export** โ€” Gemini Canvas export now supports regular document Canvas panels, so article Canvas content is included in conversation exports and Canvas Markdown copy/download actions. ([#736](https://github.com/urzeye/ophel/issues/736)) ### โœจ Improvements * **Long conversation export loading** โ€” Gemini and Qwen Studio exports now load earlier lazy-loaded history before collecting messages, reducing missed content in long conversation exports. ([#739](https://github.com/urzeye/ophel/issues/739)) ### ๐Ÿ› Bug Fixes * **AI Studio model lock in userscript** โ€” Fixed issue where the AI Studio model lock feature on the options page couldn't fetch the model list in the userscript build because it tried to use the background script proxy which doesn't exist in userscripts. Now it directly calls the adapter in userscript mode. ([#733](https://github.com/urzeye/ophel/issues/733)) **v1.1.1** ### โœจ Improvements * **Long conversation outline performance** โ€” Large outlines now render only visible rows, skip collapsed or filtered nodes, coalesce automatic refresh and scroll updates, reduce layout measurements, and cache ChatGPT/Claude/Gemini word counts, reducing lag in long chats. ([#677](https://github.com/urzeye/ophel/issues/677), [#682](https://github.com/urzeye/ophel/issues/682), [#683](https://github.com/urzeye/ophel/issues/683), [#691](https://github.com/urzeye/ophel/issues/691), [#695](https://github.com/urzeye/ophel/issues/695), [#696](https://github.com/urzeye/ophel/issues/696), [#698](https://github.com/urzeye/ophel/issues/698), [#699](https://github.com/urzeye/ophel/issues/699)) * **Global search outline updates** โ€” Global search now refreshes the outline on open and follows outline manager updates instead of polling every 1200ms, reducing background work while search is open. ([#692](https://github.com/urzeye/ophel/issues/692)) * **Conversation sidebar sync** โ€” Sidebar sync now batches conversation additions, updates, deletes, and target-folder changes into one store write, reducing storage churn during history sync. ([#697](https://github.com/urzeye/ophel/issues/697)) * **Background page work** โ€” Inline bookmark icons now avoid full outline scans for unrelated DOM changes, selected prompts reuse the shared URL-change listener, and tab title checks slow down only while a page is idle in the background while keeping completion notifications available. * **Qianwen long conversation DOM** โ€” Adapted Qianwen chat pages to the new lazy-loaded long conversation structure, so conversation export and outline copy load earlier history before collecting messages. ### ๐Ÿ› Bug Fixes * **Prompt send shortcuts** โ€” Fixed issue where sending from the chat input with Ophel's configured shortcut could lag on Claude, DeepSeek, and similar sites. Double-click prompt sending also now respects Ctrl+Enter send mode without leaving the prompt in the input box or adding a newline. ([#701](https://github.com/urzeye/ophel/issues/701), [#710](https://github.com/urzeye/ophel/issues/710)) * **ChatGPT pinned conversations** โ€” Fixed ChatGPT conversation sync for the new sidebar layout, so pinned conversations under the Pinned section are imported, title updates are tracked, and project folders are not treated as chats. * **Codex task page outline** โ€” Codex Cloud task share pages on ChatGPT now include the original prompt and response headings in the Outline instead of showing an empty outline. ([#709](https://github.com/urzeye/ophel/issues/709)) * **Gemini conversation sync** โ€” Fixed issue where first-time or empty-library Gemini auto sync could stop after only part of the history, leave the Conversations panel counts empty, or make manual sync wait longer than needed after reaching the bottom. ([#712](https://github.com/urzeye/ophel/issues/712)) * **Gemini shared chat continuation** โ€” Fixed issue where Purify Mode could hide Gemini's "Continue this chat" button on shared chat pages. ([#703](https://github.com/urzeye/ophel/issues/703)) * **Doubao long conversation export** โ€” Fixed issue where Doubao virtual-scroll conversations could export or copy only the currently mounted message window; exports and full-outline copy now scan the conversation before collecting messages. * **Outline scroll highlight stability** โ€” Fixed issue where source scrolling could highlight a user question, previous answer, or hidden child instead of the current visible heading in long conversations. ([#704](https://github.com/urzeye/ophel/issues/704), [#708](https://github.com/urzeye/ophel/issues/708)) **v1.1.0** ### ๐Ÿš€ New Features * **Quick Quote Chains** โ€” Prompt chains can now be triggered directly from quick quote actions, with chain icon picker, drag-to-reorder, and embedded quote anchors for reliable reference restoration across page refreshes. ([#623](https://github.com/urzeye/ophel/issues/623)) * **Gemini Canvas Markdown actions** โ€” Gemini Canvas panels now include Ophel Copy Markdown and Download Markdown buttons, exporting Canvas code as fenced Markdown without running a full conversation export. ([#663](https://github.com/urzeye/ophel/issues/663)) * **Segmented conversation export** โ€” Conversation export now supports choosing message ranges from a searchable picker and saving selected segments as ZIP files, merged Markdown, or clipboard content. ([#665](https://github.com/urzeye/ophel/issues/665)) * **Update modal** โ€” Ophel now shows release notes once per version and lets users reopen them from About, so update changes are visible in both extension and userscript builds. ([#666](https://github.com/urzeye/ophel/issues/666)) ### โœจ Improvements * **Quick Quote native-site positioning** โ€” Quick Quote actions now detect native selection popovers on supported sites, choose alternate positions to avoid overlap, and disable Ophel anchors where they conflict with native editors. ([#658](https://github.com/urzeye/ophel/issues/658), [#660](https://github.com/urzeye/ophel/issues/660), [#661](https://github.com/urzeye/ophel/issues/661)) * **Quick Quote default actions** โ€” Quote Reply now lives in the default prompt chain, while the selection popover keeps a fixed copy action and a smaller built-in action set. ([#664](https://github.com/urzeye/ophel/issues/664)) * **Prompt chain setup and sync** โ€” Chains launched from selected text now consistently ask to enable Prompt Queue when needed, the Chains panel prompts for Selection Quote, and userscript backup/WebDAV sync includes chain data. ([#661](https://github.com/urzeye/ophel/issues/661), [#671](https://github.com/urzeye/ophel/issues/671)) * **Store and toolbar icon polish** โ€” Updated the Chrome store icon, softened the review icon hover state, and aligned Outline toolbar icon colors with the rest of the panel. ([#662](https://github.com/urzeye/ophel/issues/662), [#668](https://github.com/urzeye/ophel/issues/668)) ### ๐Ÿ› Bug Fixes * **Outline copy at level 0** โ€” Fixed issue where copying the outline returned empty results when user queries were hidden and expand level was set to 0, even though AI response headings were visible in the panel. Now copies all heading levels (H1-H6) in this scenario to match what's displayed. * **Prompt queue keyboard shortcuts** โ€” Prompt queue input now respects the user's send shortcut setting (Enter vs Ctrl+Enter) instead of hardcoding Enter behavior. The expanded queue panel uses capture-phase event handling to prevent keyboard events from being blocked by the editable guard, so Enter and Ctrl+Enter shortcuts work correctly on all platforms including Mac. * **Prompt queue text alignment** โ€” Queue item text now displays left-aligned instead of center-aligned for better readability. * **ChatGLM generation detection** โ€” Fixed false-positive generation status detection caused by historical "answer terminated" messages. The `isGenerating()` method now excludes `.stop-answer-default` selector which matches static text from previous responses rather than the current generation state. * **ChatGLM stop button** โ€” Alt+K shortcut now correctly stops generation by targeting the inner `.enter-icon-container` element instead of the outer container div. * **Qianwen Slate editor sync** โ€” Fixed content insertion from prompt queue where inserted text couldn't be edited or deleted. The editor now properly syncs Slate's virtual DOM by using `selectAll + delete + insertText` with complete event chains (`beforeinput`, `input`, `change`) to ensure both DOM and Slate state update correctly. * **Launcher peek retention** โ€” When the mouse moves from the panel logo to other quick buttons (e.g. toolbox), the launcher peek panel now hides instead of staying open and blocking the toolbox menu. ([#653](https://github.com/urzeye/ophel/issues/653)) * **Quick Quote export markers** โ€” Fixed issue where invisible quick quote anchors could leave empty outline entries or filter out messages during conversation export and outline copy. ([#669](https://github.com/urzeye/ophel/issues/669)) * **Userscript reset and restore state** โ€” Clear All Data, backup restore, and release-note state now use the shared platform storage keys, preventing incomplete reset or restore behavior in the userscript build. ([#670](https://github.com/urzeye/ophel/issues/670)) **v1.0.60** ### โœจ Improvements * **Userscript bundle size** โ€” Split Markdown rendering code, Markdown styles, user-query Markdown styles, and site icons into external userscript assets so Greasy Fork sync has less inline code to process while preserving the existing rendering injection path. * **Zen Mode exit button** โ€” Added a "Show exit button" setting for Zen Mode, so the on-page exit button can be hidden while keeping the quick button and shortcut exit paths available. ([#645](https://github.com/urzeye/ophel/issues/645)) ### ๐Ÿ› Bug Fixes * **AI Studio mobile Enter key** โ€” AI Studio on Android and other mobile devices now lets the soft-keyboard Enter key insert a newline instead of triggering an accidental send, while Ophel-driven sends still use the native send button or the safe keyboard fallback. ([#646](https://github.com/urzeye/ophel/issues/646)) * **AI Studio mobile history sync** โ€” AI Studio conversation sync now recognizes the mobile Library card layout, so mobile pages no longer report that no sidebar conversations were found when history is available. * **Conversation sync loading** โ€” Conversation sync now uses each adapter's own conversation source to decide when sidebar history has finished loading, waits longer for slow lazy-loaded sidebars, and disables sync-delete when a complete load cannot be confirmed. Doubao and Yuanbao now share the safer base loader. ([#639](https://github.com/urzeye/ophel/issues/639)) **v1.0.59** ### ๐Ÿš€ New Features * **Outline copy** โ€” The Outline toolbar can now copy the currently selected outline depth as Markdown headings by reusing the export pipeline, so virtual-scroll conversations are loaded and restored safely before headings and user queries are copied. ([#539](https://github.com/urzeye/ophel/issues/539)) * **Conversations quick open** โ€” Conversation rows can now be opened from the context menu in a new tab, so older sessions can be reopened without replacing the current chat. ([#578](https://github.com/urzeye/ophel/issues/578)) ### ๐Ÿ› Bug Fixes * **ChatGPT native TOC outline** โ€” ChatGPT outlines now recover the full user-question list when the native TOC only exposes real prompt text after hover, cache the extracted labels per TOC instance, and avoid userscript crashes from cross-realm pointer events. ([#642](https://github.com/urzeye/ophel/issues/642)) * **ChatGPT tab status** โ€” ChatGPT tabs no longer show `โณ` while idle when a sidebar conversation title contains "Stop" or "ๅœๆญข". The generation detector now only uses visible stop buttons from the composer area. ([#630](https://github.com/urzeye/ophel/issues/630)) * **Gemini tab renaming** โ€” Gemini tabs no longer flicker back to the native page title during active replies when automatic tab renaming is enabled. * **Gemini watermark removal** โ€” Replaced the legacy Gemini/Nano Banana remover with the SDK-backed implementation and fixed user-uploaded image handling plus generated-image removal regressions. ([#593](https://github.com/urzeye/ophel/issues/593), [#625](https://github.com/urzeye/ophel/issues/625)) * **Prompt imports** โ€” Prompt Library import now accepts prompt backup files exported from the Backup page, not just the raw prompt-list JSON format. * **Rendered user-query spacing** โ€” Rendered Markdown in user questions now ignores native plain-text whitespace classes, preventing large blank gaps between paragraphs and quoted text on DeepSeek, Doubao, Z.ai, ChatGLM, Qwen, and similar sites. **v1.0.58** ### ๐Ÿ› Bug Fixes * **Conversation title isolation** โ€” Browser tab renaming now keeps Ophel-managed status/model labels separate from raw conversation titles, preventing exported conversation titles and filenames from inheriting tab status, model names, or repeated `->` separators when a page cannot expose its model name. * **Doubao share-page export and outline** โ€” Doubao share links under `/thread/` are now recognized as exportable conversations, and share-page message lists can now feed the Outline tab instead of requiring the regular chat-page virtual list. * **Z.ai share-page outline** โ€” Z.ai share pages now reuse the same conversation content container detection as export, so Outline extraction works when the share DOM does not include the regular `#chat-container` wrapper. * **ChatGLM code-block export** โ€” ChatGLM assistant replies split around code blocks now export the full answer instead of stopping at the first rendered Markdown segment. * **Localized untitled exports** โ€” Untitled export titles now follow the current UI language even when an older fallback title was saved in another language. * **Qianwen user-query Markdown contrast** โ€” Rendered user-query Markdown on Qianwen now uses a dedicated readable bubble style instead of inheriting low-contrast native question-card colors. * **Qianwen/Qwen Studio Outline duplicates** โ€” User questions wrapped by nested site containers now appear once in the Outline while preserving the correct export output. * **Custom tab-title formats** โ€” Missing model names and previously managed tab titles are now resolved from the configured placeholder structure instead of separator-specific cleanup, preventing recursive title growth with arbitrary custom formats. **v1.0.57** ### ๐Ÿ› Bug Fixes * **Claude theme mode sync** โ€” Claude theme switching now keeps Claude-specific DOM hints inside the Claude adapter and avoids writing extra page-level `light` / `data-theme` / `color-scheme` markers that could diverge from Claude's native theme state. * **ChatGPT native TOC bookmark stability** โ€” ChatGPT native TOC user-question bookmarks now keep the same identity across virtual-scroll state changes, reducing ghost bookmarks and duplicate matches for the same prompt. **v1.0.56** ### ๐Ÿš€ New Features * **AI Studio user attachments in exports** โ€” AI Studio Markdown exports now include images and files from user prompts; zip packages preserve downloadable user images under `assets/images/`, while file-only cards keep their visible filename and token details in Markdown. * **ChatGLM attachment, image, and thought export** โ€” ChatGLM exports now preserve user-uploaded images and files plus AI-generated images in Markdown and zip packages. Share-page exports also recognize ChatGLM's current thinking payloads and format included thoughts as `> [Thought]` blockquotes when "Include Thoughts in Export" is enabled, while filtering user avatars from exported assets. * **ChatGPT generated image export** โ€” ChatGPT Markdown exports now include generated image-only assistant turns, preserving generated images in both regular Markdown output and zip asset packages. * **Claude export attachments and thoughts** โ€” Claude Markdown exports now preserve images and files from user prompts in both Markdown and zip package modes, and can include expanded Claude thinking blocks when "Include Thoughts in Export" is enabled. * **DeepSeek user attachments in exports** โ€” DeepSeek Markdown exports now include images and files from user prompts, including share pages; zip packages resolve downloadable share attachments into `assets/images/` and `assets/files/` with stable Markdown references. * **Doubao image and attachment export** โ€” Doubao Markdown exports now include images and files from user prompts plus images from assistant replies. Zip packages preserve downloadable resources under `assets/images/` and `assets/files/`, with generated-image fallback handling for pages that keep only placeholder images in the DOM. * **Grok image and attachment export** โ€” Grok Markdown exports now include generated images from assistant replies plus images and files from user prompts. Zip packages preserve downloadable images under `assets/images/` and user files under `assets/files/` with stable Markdown references. * **Gemini Canvas code export** โ€” Gemini conversation and share-page exports now open Canvas artifacts, switch to the code tab without relying on localized labels, and include generated Canvas code in Markdown exports. * **Ima attachment, generated image, and thought export** โ€” Ima Markdown exports now include user-uploaded images and files, preserve AI-generated images in regular Markdown and zip asset packages, and include visible thinking content when "Include Thoughts in Export" is enabled. Empty attachment containers are ignored so plain user prompts no longer export a phantom `attachment` item. * **Kimi share conversation export** โ€” Kimi share pages are now supported in conversation export, outline, and scroll navigation. Exports preserve user-uploaded images in Markdown and zip asset packages, include visible file attachment labels, and keep user prompts aligned with the correct assistant replies. * **Qianwen attachment and generated image export** โ€” Qianwen Markdown exports now recognize the current share-page question and answer DOM, include user-uploaded images and file cards, and preserve AI-generated images in both regular Markdown and zip asset packages, avoiding empty-message exports on updated pages. * **Qwen Studio attachment, generated image, and thought export** โ€” Qwen Studio Markdown exports now include user-uploaded images and full file-card names, preserve AI-generated images in regular Markdown and zip asset packages, and can export expanded thinking details from regular and share-page conversations when "Include Thoughts in Export" is enabled. * **Yuanbao attachment, generated image, and thought export** โ€” Yuanbao Markdown exports now include images and files from user prompts, preserve AI-generated images in regular Markdown and zip asset packages, and include visible thinking content when "Include Thoughts in Export" is enabled. * **Z.ai attachment and thought export** โ€” Z.ai conversation and share-page exports now preserve user-uploaded images and files in Markdown and zip packages, deduplicate signed CDN links from API and DOM sources, and include reasoning blocks when "Include Thoughts in Export" is enabled. ### โœจ Improvements * **Export progress overlay** โ€” Long conversation exports now show a full-page progress overlay with the current export stage, blocking accidental clicks, scrolling, and typing while Ophel loads history, extracts content, packages assets, saves files, and restores the page. **v1.0.55** ### ๐Ÿš€ New Features * **ChatGPT Deep Research export** โ€” ChatGPT Markdown zip exports now preserve uploaded images and linked files from user prompts, and include Deep Research reports as a title and link in Markdown. The extension build also allows `oaiusercontent.com` assets so shared-page images can be packaged. ([#579](https://github.com/urzeye/ophel/issues/579)) * **Claude document artifacts and outline** โ€” Claude Markdown document artifacts can now be exported as linked files in Markdown zip packages under `assets/documents/`, and the Outline tab shows a separate Document source when Claude's right-side document panel is open. ([#588](https://github.com/urzeye/ophel/issues/588)) * **Claude user attachments in exports** โ€” Claude Markdown zip exports now preserve uploaded images and linked files from user prompts, packaging them under `assets/images/` and `assets/files/` with stable Markdown references. ([#588](https://github.com/urzeye/ophel/issues/588)) * **Gemini Deep Research document outline** โ€” The Outline tab now shows a "Chat / Document" source switch when a Gemini Deep Research report is open, letting you browse and jump through the right-side report outline separately from the left-side conversation outline. ([#585](https://github.com/urzeye/ophel/issues/585)) * **Gemini Deep Research report panel Markdown shortcuts** โ€” Added Copy Markdown and Download Markdown buttons to the Gemini Deep Research right-side report panel toolbar, exporting only the current report without changing regular conversation exports. ([#579](https://github.com/urzeye/ophel/issues/579)) * **Markdown export packages** โ€” Markdown exports can now be delivered as a zip package when a site adapter provides assets, including a manifest and stable relative paths for referenced files. Generated Markdown documents are packaged under `assets/documents/`, images under `assets/images/`, and user-uploaded attachments under `assets/files/`, with uploaded documents resolved the same way as regular Gemini conversations. ([#580](https://github.com/urzeye/ophel/issues/580)) * **Gemini Deep Research export** โ€” Gemini Deep Research exports now cover owned app conversations, conversation share pages, and generated report share pages; closed report panels are opened during export and restored afterward, with uploaded file labels included in exported user prompts. ([#573](https://github.com/urzeye/ophel/issues/573)) ### ๐Ÿ› Bug Fixes * **Theme sync regression** โ€” Turning off Sync Native Page Colors no longer prevents supported host pages from following Ophel's light/dark theme toggle. The setting now only controls native color override CSS, while Doubao and Ima remain panel-only because their adapters declare host theme sync unsupported. * **Claude export order and outline cleanup** โ€” Claude assistant exports now keep text and artifact links in their original reply order, and page/sidebar headings such as "Recents" are no longer pulled into the conversation outline. ([#588](https://github.com/urzeye/ophel/issues/588)) * **Inline bookmark visibility** โ€” Page inline bookmark icons now fully respect the hidden setting and no longer depend on the Outline tab's "show user questions" filter, fixing stale or missing stars on virtual-scroll sites such as ChatGPT, DeepSeek, AI Studio, and Doubao. ([#570](https://github.com/urzeye/ophel/issues/570)) **v1.0.54** ### ๐Ÿš€ New Features * **Prompt queue and library integration** โ€” Prompt Library actions can now add prompts to the queue, and the queue batch dialog can add prompts directly from the library. ([#547](https://github.com/urzeye/ophel/issues/547), @mrpops2ko) ### โœจ Improvements * **Direct row drag sorting** โ€” Prompt items and conversation folders can now be reordered by long-press dragging the row itself, matching the existing conversation-item interaction without requiring a dedicated drag handle. * **Clearer outline tab icon** โ€” Updated the Outline tab and tab-order settings icon to better communicate the outline hierarchy while keeping the previous document-style icon for empty states. * **Prompt floating controls** โ€” Softened the selected-prompt bar styling and aligned it with the prompt queue above the input box. ### ๐Ÿ› Bug Fixes * **Doubao and Ima panel theme switching** โ€” Ophel's panel theme now switches independently on sites that do not support native page theme changes, fixing Doubao getting stuck in dark mode and keeping rendered user-query code blocks readable. * **ChatGPT clean mode sponsored cards** โ€” Clean Mode now hides ChatGPT sponsored recommendation cards, including the new ad blocks with "Ad options" menus. * **Doubao outline extraction** โ€” Doubao outlines now recognize the newer `md-box-root` answer DOM, restoring headings for conversations that previously showed an empty outline. ([#565](https://github.com/urzeye/ophel/issues/565)) * **Conversation folder selector icon spacing** โ€” Tightened the sync-folder selector padding and gave folder emoji icons a stable centered box so they no longer look clipped in the Conversations toolbar. * **Attachment-only submit shortcut** โ€” Pressing Enter or Ctrl+Enter can now send messages that contain only images or attachments. ([#555](https://github.com/urzeye/ophel/issues/555)) * **Temporary panel preview interactions** โ€” Dialogs, menus, dropdowns, and Prompt tab popups opened from the temporary Quick Buttons panel preview now keep the preview available while you interact with them, then close the preview automatically once the interaction ends. * **DeepSeek outline navigation** โ€” Outline jumps to user questions in long DeepSeek conversations now use DeepSeek's native timeline when the message is outside the mounted DOM, avoid stale jump results during rapid clicks, and keep only the current outline item highlighted without showing bookmark-missing notices for normal outline jumps. **v1.0.53** ### ๐Ÿš€ New Features * **Formula copy format setting** โ€” Double-click formula copy can now output either LaTeX source or MathML source. LaTeX delimiter wrapping remains available for LaTeX mode, while MathML mode copies the serialized `` source when the site exposes one. ### ๐Ÿ› Bug Fixes * **Claude adapter** โ€” Adapted to Claude's recent page redesign: outline no longer picks up screen-reader-only headings, share links with new URL format are now recognized, theme switching works again, model locking and click simulation are compatible with the new UI components. * **Doubao virtual scroll navigation** โ€” Adapted Doubao to its new virtual-list chat DOM so outline jumps, return anchors, and top/bottom navigation now use the real `v_list_scroller` container. The outline also keeps an in-memory cache of headings and user prompts that have entered the viewport, preventing previously seen outline items from disappearing when Doubao unloads them from the DOM. * **Kimi conversation navigation** โ€” Fixed the Conversations tab failing to switch Kimi chats when clicking history items from Kimi's sidebar. Kimi chat links are now matched by parsed conversation ID instead of a broad selector, with an SPA route fallback when the native link is not mounted. * **Ima user prompt extraction** โ€” Restored user-question detection for Ima's updated chat DOM, so prompts inside the new `userBubbleWrap` / `chatMainBubble` structure are included in outline, export, usage stats, and user-query Markdown rendering again. * **Formula copy site compatibility** โ€” Added Qwen Studio support for its non-standard formula DOM where LaTeX source is embedded as direct text inside ``. Kimi and Yuanbao now explicitly show an unsupported-site message instead of attempting unreliable extraction from visual-only KaTeX HTML. * **Gemini Canvas freeze with table Markdown copy** โ€” Table copy buttons are no longer injected into Gemini Canvas editor tables, preventing ProseMirror DOM update loops that could freeze or crash the page when a Canvas document contains tables. ([#535](https://github.com/urzeye/ophel/issues/535)) **v1.0.52** ### ๐Ÿš€ New Features * **Hover Ophel logo to temporarily preview the panel** โ€” When the panel is collapsed into the Quick Buttons logo, hovering the logo now opens a temporary panel preview anchored beside the Quick Buttons group. The preview does not persist the panel's expanded state, and clicking the logo still performs the regular panel toggle. ([#524](https://github.com/urzeye/ophel/issues/524)) * **Title format token chips** โ€” The title format input in Settings now renders `{status}`, `{title}`, and `{model}` placeholders as styled blue chips, making the format template easier to read and edit at a glance. * **Tab status indicator: "hide checkmark when read"** โ€” A new option keeps the โœ… completion icon visible only until you view the tab, then hides it automatically. ([#520](https://github.com/urzeye/ophel/issues/520)) ### ๐Ÿ› Bug Fixes * **Reading history restore scope** โ€” Reading history now saves and resumes positions only on owned conversation pages. Shared pages, new-chat pages, and other site routes no longer trigger auto-resume; page eligibility now lives in each site adapter for clearer maintenance. * **Conversation sync cleanup** โ€” Manual sync now removes conversations that were deleted on the same site/account and opens Gemini's recent chats section when needed before syncing. * **Gemini Library page: fix "Open in New Tab"** โ€” Adapted to the new `/library` path (renamed from `/mystuff`) and adjusted button position to avoid overlap with Gemini's native delete button. * **Zen mode exit button text unreadable due to transparency**: Replaced the button background from translucent glass-morphism variables with the theme's primary background color, preventing underlying page text from bleeding through and making both layers unreadable. ([#431](https://github.com/urzeye/ophel/issues/431)) * **Tab title: prevent `->` duplication** โ€” Fixed a race condition where the auto-rename title format could repeatedly append `->` to the tab title when the model name was temporarily unavailable, resulting in chains like `ๆ ‡้ข˜->->->->`. * **Gemini adapter: adapt to new sidebar structure** โ€” Updated selectors and navigation logic to support the new `gem-nav-list-item[data-test-id="conversation"]` sidebar items; added a scroll-to-load helper and fixed conversation ID/title extraction and navigation to restore compatibility with the Gemini sidebar redesign. **v1.0.51** ### ๐Ÿš€ New Features * **Quick Buttons proximity wake radius** (`Settings โ†’ Quick Buttons`): A new slider controls how close the cursor must be before the floating widget auto-expands (default 150 px, matching previous behavior). Set it to **0** for a true dwell-hover mode โ€” the widget only expands after the cursor rests on the water-drop for 300 ms, preventing accidental expansion from the cursor passing through. ([#492](https://github.com/urzeye/ophel/issues/492)) * **Drag conversations into folders**: In the Conversations tab, you can now drag a chat onto any folder to move it there. Thanks @t0ny-peng ([#512](https://github.com/urzeye/ophel/issues/512)) ### ๐Ÿ› Bug Fixes * **Floating panel settings UX and positioning preview**: Moved the default edge distance margin setting to only display under Floating panel mode, and updated the description across all 10 locales. Also fixed an issue where adjusting default margin/position settings failed to update the panel position in real-time. ([#519](https://github.com/urzeye/ophel/issues/519)) * **Fixed ChatGPT outline display and navigation issues**: Resolved cases where the outline was incomplete or clicks failed to navigate to the message in long chats, and fixed routing issues where switching conversations caused the outline to lag, display incorrect entries, or show empty headings. ([#402](https://github.com/urzeye/ophel/issues/402)) * **Resolved ChatGPT export duplication, scrambling, and truncation issues in long conversations**: Re-engineered the export process to handle virtualization, ensuring all turns are fully loaded, ordered correctly, and deduplicated without missing segments or repeating messages. * **AI Studio export missed turns and could loop in long conversations**: Rewrote the export collector to iterate the DOM-resident `ms-chat-turn` list directly so every user prompt and assistant reply (including attachments and the separate "thoughts" turn) is captured in a single pass. * **Fixed conversation title missing or wrong on shared pages across 12 sites**: Added `isSharePage()` detection and page-heading fallbacks so the browser tab title and export Markdown heading work correctly on shared (non-owned) conversation pages. **v1.0.50** ### ๐Ÿ› Bug Fixes * Fixed page-width and user-question-width adjustments not working or misaligned on DeepSeek, Kimi, and Qianwen * Fixed code and math in Qianwen user messages not rendering correctly * Fixed clean mode not hiding new promotional banners on ChatGLM, Ima, and Kimi * Fixed code blocks displaying with inconsistent widths when page-width adjustment is enabled on ChatGLM * Fixed the `Alt+/` shortcut reporting "model selector not found" on AI Studio * Fixed the outline only showing nearby messages in long conversations on AI Studio and ChatGPT * Fixed the copy button disappearing when scrolling inside a code block in user messages * Fixed code blocks being hard to distinguish from the message bubble background on some sites (Kimi, DeepSeek, etc.) * Fixed the circular theme-switch animation not appearing on ChatGPT **v1.0.49** ### ๐Ÿ› Bug Fixes * **Windows UI font regression after the macOS CJK fallback fix**: Restored `system-ui` priority on Windows and other non-macOS platforms while keeping CJK fonts before `system-ui` on macOS. Also removed Arial/Roboto local aliases from the Inter fallback so environments without bundled Inter fall back to the native system UI font instead of mixing unrelated fonts. ([#489](https://github.com/urzeye/ophel/issues/489) regression, [#491](https://github.com/urzeye/ophel/issues/491)) * **macOS CJK font appears too thin (PingFang SC)**: Changed the macOS CJK font preference from `PingFang SC` to `Hiragino Sans SC` (with PingFang SC as fallback). Hiragino Sans SC has heavier strokes that render more legibly at normal weight on macOS. **v1.0.48** ### ๐Ÿ› Bug Fixes * **Settings About page store icons shrink when platform name wraps**: Added `flex-shrink: 0` to store icon SVGs so they maintain consistent size regardless of the platform name's length in the "Love Ophel?" rating section. Also shortened the German `edgeAddons` label from `"Microsoft Edge Add-on"` to `"Edge Add-on"` to match other locales and prevent unnecessary wrapping. * **Gemini strips code indentation in user query Markdown**: Fixed `extractUserQueryMarkdown` trimming all leading whitespace from each `query-text-line`, which removed meaningful code indentation. Now uses dedent logic to strip only the wrapper spaces Gemini adds, preserving relative indentation inside code blocks. * **ChatGPT model lock fails to detect model in non-English locales**: Fixed an infinite switch loop where the keyword (e.g. `think`) matched the English menu item slug (`gpt-5-5-thinking`) but not the localized pill label (`ๆ€่€ƒ`). The adapter now retains the last known model slug after the menu closes, so the lock check passes regardless of display language. * **ChatGPT model lock broken after site redesign**: The 2025 ChatGPT redesign removed the header model-switcher button. Updated the adapter to target the new Composer area Pill button (`__composer-pill`), fix menu item detection (`menuitemradio` role + `data-testid^=model-switcher-`), and extract model name from the pill's `span.truncate` text node. Removed \~90 lines of now-obsolete state-caching code specific to the old two-step header interaction. * **User query code blocks wrap too early near the copy button**: Fixed the user query Markdown code copy button participating in code text layout and reducing the first line's available width. The button now overlays the code block without forcing premature line wraps. * **Gemini font reverts to Times New Roman when using code blocks**: Fixed font regression on Gemini when user messages contain backticks or code blocks. The injected markdown container now explicitly applies `font-family` and forced inline `background`/`color` styles to override Angular's component-scoped CSS rules, preserving Google Sans/Roboto font. Primarily affects Firefox/Zen Browser users. ([#474](https://github.com/urzeye/ophel/issues/474)) * **User query bubble background overridden by site theme**: Fixed native theme sync on ChatGPT, Kimi, and Gemini incorrectly applying theme colors to the user message bubble background. User bubbles now retain their original platform colors when theme sync is enabled. * **Syntax highlighting broken in user query code blocks**: Fixed hljs token colors (keywords, strings, comments, etc.) being overridden by site CSS on some platforms. * **CJK font falls back to Hiragino (Japanese glyphs) on macOS in English locale**: Fixed the font-family stack across all UI surfaces placing `system-ui`/`BlinkMacSystemFont` before explicit CJK fonts. Blink's CJK fallback logic would select Hiragino instead of PingFang SC on English-locale macOS, causing mixed glyph shapes and inconsistent character metrics within the same text. CJK fonts (`PingFang SC`, `Hiragino Sans SC`, etc.) are now declared before `system-ui` to ensure correct Simplified Chinese rendering. ([#486](https://github.com/urzeye/ophel/issues/486)) **v1.0.47** ### โœจ Improvements * **Gemini Markdown Bold Fix now defaults to off**: The "Markdown Bold Fix" toggle for Gemini is now disabled by default. It can still be enabled in Settings โ†’ Site Settings โ†’ Gemini. * **Panel state remembered in auto-snap mode**: Both floating and auto-snap modes now remember whether the panel was open or closed across page refreshes. ### ๐Ÿ› Bug Fixes * **Claude reply notifications repeating endlessly**: Fixed notifications firing repeatedly after a reply was completed on Claude.ai. ([#470](https://github.com/urzeye/ophel/issues/470)) * **Yuanbao theme sync broken**: Fixed theme detection failing on Yuanbao after they changed their dark mode implementation. * **Drag-to-sort broken on Yuanbao**: Fixed tab order, quick button, and prompt drag sorting failing on Yuanbao. **v1.0.46** ### ๐Ÿ› Bug Fixes * **Gemini source tooltips broken after Markdown fix**: Fixed source/citation tooltip chips disappearing in Gemini when the Markdown bold fix was enabled. The fixer was rewriting paragraph `innerHTML`, destroying Gemini's native event handlers for source tooltips. Affected paragraphs that contained citation chips are now skipped. ([#468](https://github.com/urzeye/ophel/issues/468)) **v1.0.45** ### โœจ Improvements * **Max page width raised to 99%**: The maximum percentage for page width and user query width is raised from 94% to 99%. ([#447](https://github.com/urzeye/ophel/issues/447)) * **Narrow screen auto-adaptation**: On narrow screens like mobile, percentage-width mode automatically expands to 95% to prevent content from being too narrow. ([#447](https://github.com/urzeye/ophel/issues/447)) * **Auto-hide quick buttons when panel opens**: When the toggle is on, the quick button group auto-collapses when the panel opens and restores when it closes, keeping the interface cleaner. * **Quick button settings layout improvement**: The "Hide" toggle and "Opacity" control are grouped separately above the button ordering list, making them easier to find. ### ๐Ÿ› Bug Fixes * **Panel position drift on zoom**: Fixed the quick button group and main panel gradually drifting to the center of the screen after using trackpad or browser zoom shortcuts. ([#458](https://github.com/urzeye/ophel/issues/458)) * **Quick button settings lost on refresh**: Fixed some settings being reset after saving and refreshing the page. * **Untranslated UI strings**: Fixed some dialogs and tooltips showing Chinese text in Russian, English, German, and 10 other languages. * **Korean/CJK text rendering broken**: Fixed Korean and other CJK characters appearing as boxes or garbled text in the panel for Windows users. (Thanks @Apious [#432](https://github.com/urzeye/ophel/issues/432)) * **DeepSeek page width**: Aligned AI reply width with the input box width. **v1.0.44** ### โœจ Improvements * **WebDAV provider quick presets**: Added server address presets for popular services including Jianguoyun (NutStore), InfiniCloud, Nextcloud, Synology, and Seafile โ€” click to fill in, no manual lookup needed. * **Backup action area redesign**: Regrouped buttons for Test Connection, Save Config, Backup Now, and Restore Backup with clearer visual hierarchy. * **Backup file list style improvement**: File names now use a scrollable horizontal layout to avoid truncation; Restore and Delete buttons are in separate columns for clearer targeting. * **Settings page description improvements**: Rewrote descriptions for word count, Firefox shortcut notes, and AI Studio model sync for greater accuracy. * **Reading history default retention reduced to 3 days**: Reduced from 7 days to 3 days to save local storage; existing data is not affected. * **Send shortcut setting moved to Prompts panel**: The "Send Shortcut" option moved from general settings to the Prompts tab, grouping it with prompt-related features. * **Global shortcut default changed to Alt+O**: Avoids conflict with Chrome's built-in "Open Gemini" shortcut; displayed as `โŒฅO` on Mac. * **ChatGPT bold fix disabled by default**: Reduces interference with ChatGPT's native page styles; can be enabled manually when needed. ### ๐Ÿ› Bug Fixes * **WebDAV backup list parsing compatibility**: Fixed inability to read cloud backup file lists when some WebDAV providers (e.g. pCloud) return XML with namespace prefixes. * **WebDAV operation interrupted after first authorization**: Fixed the original operation (backup, restore, or test connection) not resuming after confirming the authorization dialog on first WebDAV use. * **Doubao conversation delete confirmation broken**: Adapted to Doubao's new page structure; fixed the delete confirmation dialog not triggering correctly (also fixed for Traditional Chinese UI). * **Quick button initialization position jump**: Fixed the visual jump of quick buttons sliding down from the top to their target position on page refresh. ### โ„น๏ธ Notes * Existing users' global shortcuts will not change automatically. To use `Alt+O`, please update it manually in your browser's shortcut settings. **v1.0.43** ### ๐Ÿš€ New Features * **Panel mode toggle shortcut**: Added `Alt+M` (Mac: `โŒฅM`) shortcut to switch between Auto-Snap and Floating modes with one key. ### โœจ Improvements * **More visible toast messages**: Toast notifications are now clearer across all themes (including dark mode), long text is auto-truncated, and the system "Reduce Motion" setting is respected. * **Anchor button click animation**: Added a light spring animation when clicking anchor buttons in the main panel footer and floating quick buttons for more responsive feedback. ### ๐Ÿ› Bug Fixes * **Tooltip lingering after tab switch**: Fixed tooltips appearing unexpectedly when switching away and back to the browser tab during a hover-triggered countdown. * **Horizontal image carousel blocked**: Fixed horizontal image carousels on ChatGPT and similar pages being unable to swipe left/right when "Prevent Auto-Scroll" was enabled. **v1.0.42** ### โš ๏ธ Breaking Changes * **Double-click title bar behavior changed**: The double-click action on the panel title bar changed from "Toggle Privacy Mode" to "Quick switch panel display mode (Floating โ†” Auto-Snap)". ### โœจ Improvements * **Double-click title bar to switch panel mode**: Double-click the panel's top title bar (Logo or brand name area) to quickly switch between Floating and Auto-Snap modes without entering settings. * **Hover on Logo/brand name to show advanced guide**: Moving the mouse over the panel's Logo or Ophel brand name automatically shows the advanced shortcut guide (MagicCodex), which closes when the mouse leaves. * **Overall UI refinement**: Numerous UI detail improvements. * **Community links in settings page**: Added store rating, GitHub, Ko-fi, and Discord quick links in the bottom-left corner, with theme and language switching integrated. * **About page visual polish**: Comprehensive refinement of buttons, headings, navigation, and theme cards. * **Feature tip tour**: Added feature hint bubbles to the panel and outline tabs to help discover hidden functionality. * **Panel tab icons slightly enlarged**: Outline, conversation, and prompt icons enlarged from 14px to 16px for better clarity. ### ๐Ÿ› Bug Fixes * **Update notification showing repeatedly**: Fixed the "plugin updated" dialog reappearing shortly after being closed. * **Settings slider reset not persisting**: Fixed "Restore Default" taking effect immediately but reverting to old values after page refresh. * **Panel briefly flashing default light theme on refresh**: Fixed panels briefly flashing to the default appearance before switching back to the user's theme on fast-loading sites like Gemini. **v1.0.41** ### โœจ Improvements * **"Tips & Tricks" category in global search**: Type `tip:` in global search to quickly filter all feature tips; a dedicated tab makes tips easy to discover and review. * **Fuzzy search button active state visual improvement**: When fuzzy search is enabled, the button shows themed text + bold + solid themed border + light background highlight, clearly indicating the active state with automatic adaptation for dark/light and custom themes. ### ๐Ÿ› Bug Fixes * **Search syntax example clicks not working**: Fixed clicking syntax examples (e.g. `type:outline`, `date:7d`) in global search only closing the overlay without inserting into the input. * **Toast blocked by backdrop-filter**: Fixed toast notifications being blocked and blurred by the backdrop-filter used in global search and the settings page. Moved the mount point from `document.body` to the top-level Shadow DOM container to avoid stacking context isolation. * **AI Studio adapted to new sidebar**: Updated adapter for AI Studio's new sidebar structure. **v1.0.40** ### โœจ Improvements * **Outline scroll sync performance**: When scrolling the conversation page, outline highlight indicator switched from full React re-render to direct DOM classList operations โ€” only 2 DOM operations per scroll, eliminating useless reconciles across 1000+ OutlineNodeView components. ([#397](https://github.com/urzeye/ophel/issues/397)) * **MutationObserver scope narrowed**: Outline auto-update MutationObserver scope narrowed from `document.body` to the AI reply container level, reducing callbacks triggered by unrelated DOM changes. ([#395](https://github.com/urzeye/ophel/issues/395)) * **treeKey hash compression**: Outline tree keys now use djb2 hash algorithm, compressing long keys to 8-character hex strings, improving string comparison efficiency for large numbers of headings. ([#395](https://github.com/urzeye/ophel/issues/395)) ### ๐Ÿ› Bug Fixes * **Sibling headings with same text overwriting collapse state**: Fixed two sibling headings with identical text (e.g. two `## Summary`) overwriting each other's collapse/expand state; key generation now prioritizes node ID. ([#395](https://github.com/urzeye/ophel/issues/395)) * **Outline fallback refresh race condition**: Fixed the fallback timer forcing a tree rebuild after treeKey had already updated naturally, preventing unnecessary resets of user collapse state. ([#395](https://github.com/urzeye/ophel/issues/395)) * **Outline missing refresh on tab switch**: Fixed outline refresh being lost when the outline tab was in the background during AI generation completion; automatically refreshes when switching back to the outline tab. ([#395](https://github.com/urzeye/ophel/issues/395)) * **Panel mode switch flash**: Fixed panel flashing on the left side of the page for one frame when switching from floating mode to edge-snap mode. ([#398](https://github.com/urzeye/ophel/issues/398)) * **Accidental quick button drag**: Raised the long-press drag threshold from 150ms to 220ms to reduce accidental drag triggers on quick clicks. * **Position jump on floating mode switch**: Panel no longer resets to `defaultEdgeDistance` when switching to floating mode from settings; it stays in place. `defaultEdgeDistance` is now only used as the initial position on page refresh. * **Panel not retracting after closing settings/search in snap mode**: Fixed settings modal and global search being rendered inside Shadow DOM causing MutationObserver to miss their close events; unified overlay detection scope and synced panel hover state on close. * **No preview when switching to snap mode from settings**: Panel now immediately snaps/retracts as a preview when switching to edge-snap mode from settings, instead of staying expanded due to detecting the settings modal still open. **v1.0.39** ### โœจ Improvements * **Panel mode simplified**: Panel behavior settings simplified to two modes (Floating / Edge Snap), more intuitive without needing separate toggles. * **One-click mode switch in panel header**: Added a pin/snap toggle button in the header for quick mode switching without entering settings. * **Panel header streamlined**: Removed infrequently used buttons from the header for a cleaner look. * **Title bar hover tips**: Random usage tips shown when hovering the panel title bar to help discover hidden features. * **Navigation buttons always visible in edge-snap mode**: Scroll-to-top/bottom and anchor quick buttons no longer hide when panel is not overlapping them. * **Conversation list performance**: Large numbers of conversations under a folder no longer cause lag; progressive loading implemented. ([#369](https://github.com/urzeye/ophel/issues/369)) * **Global search performance**: Reduced redundant re-rendering of search results for smoother search experience. * **Userscript load speed improved**: Significantly faster userscript loading after page refresh. * **Theme adaptation refined**: Native theme now only colors the sidebar, no longer affecting the main content area of AI platforms. * **Bundled Inter font**: Extension version bundles Inter Variable font for improved typography. ### ๐Ÿ› Bug Fixes * **Permissions management page restored**: Fixed permissions page stuck in loading state with unresponsive "Allow" button. Root cause was `chrome.notifications` API lacking optional permission guard causing Service Worker initialization failure; also changed Options page permission requests to call `chrome.permissions.request()` directly instead of routing through Service Worker. ([#384](https://github.com/urzeye/ophel/issues/384)) * Fixed scrollbar flashing, position jumps, and other interaction issues when switching panel modes. * Fixed left-side snap animation delay; behavior is now unified on both left and right sides. * Fixed double-clicking the title causing the panel to accidentally leave snap state. * Fixed several memory leaks (animation frames and timers not cleaned up). * Fixed Korean characters appearing as boxes in userscript. ([#373](https://github.com/urzeye/ophel/issues/373)) * Fixed position drift and icon issues after quick button liquid collapse. * Fixed slider max value label in settings page being displaced below the "Restore Default" button. **v1.0.38** ### โœจ Improvements * **Zen Mode and Clean Mode split**: The original "Zen Mode" is now split into "Zen Mode" (hides sidebar and navigation) and "Clean Mode" (hides disclaimers, ads, and other redundant elements) as two independent settings. Clean Mode is enabled by default; Zen Mode automatically includes the clean effect when enabled. ([#365](https://github.com/urzeye/ophel/issues/365)) * **Notification click to foreground**: Desktop notifications for completed AI generation in the browser extension now support clicking to jump directly to the corresponding tab and focus the window, matching userscript behavior. ([#359](https://github.com/urzeye/ophel/issues/359)) ### ๐Ÿ› Bug Fixes * **Firefox outline panel scroll bounce**: Fixed the outline panel jumping back to the active item position when scrolling in Firefox (including Zen Browser); debouncing the wheel event to pause auto-positioning. ([#360](https://github.com/urzeye/ophel/issues/360)) * **ChatGPT reading position jumping to bottom after restore**: Fixed reading progress being successfully restored on page refresh but then immediately pulled to the bottom by ChatGPT's auto-scroll. Added a DOM attribute-based position lock mechanism for synchronous cross-world communication, replacing the race-prone async postMessage approach; introduced an adaptive timeout strategy (2-second idle release, 15-second max) with support for outline clicks and anchor jumps during the lock period. * **macOS ghost pass-through restored**: Fixed the panel occasionally not entering the low-interference ghost pass-through state on macOS when holding the Command key, reducing obstruction of page content and click operations. ### ๐Ÿ“ Documentation * **User docs fully rewritten**: All user guides rewritten in Chinese and English, covering Quick Start, Panel Overview, Quick Buttons, Smart Outline, Conversation Management, Prompt Library, Enhancement Features, Appearance Themes, Backup & Sync, Shortcuts, and FAQ โ€” more complete and easier to follow. **v1.0.37** ### โœจ Improvements * **Main panel and quick button style overhaul**: Overall visual refresh of the main panel and quick buttons, further unifying hierarchy, spacing, and hover interactions for a lighter feel. * **Quick button ghost pass-through**: Quick buttons enter a low-interference "ghost state" when idle and support mouse event pass-through to the underlying page, reducing obstruction of site content and operations. **v1.0.36** ### โœจ Improvements * **Quick button experience upgrade**: Integrated "Zen Mode" and "Global Settings" into the outer quick group with defaults enabled; redesigned intelligent grouping โ€” feature toggles at top, navigation actions fixed at bottom with a separator. * **Zen Mode immersive icon animation**: When Zen Mode is enabled, the related icon in quick buttons seamlessly switches to the closed-eye state (EyeClosedIcon) with a minimalist 4-second breathing glow animation, providing visual feedback that matches the "immersive focus" mental model. * **Native page color sync label clarified**: "Sync native page theme" labels unified as "Sync native page colors", clarifying that page light/dark mode always follows Ophel, and this toggle only additionally controls some native element colors; descriptions updated in all 10 languages to reduce confusion. * **Zen Mode exit button visual overhaul**: Exit button redesigned as a top-centered floating glassmorphism capsule with smooth entrance animation that seamlessly adapts to the global theme system. * **Global Toast notification upgrade**: Replaced heavy gradient color blocks with a premium frosted glass card style; built-in smart avoidance mechanism automatically moves down when Zen Mode is active to prevent overlap. * **Watermark removal indicator repositioned**: The loading indicator during Gemini image watermark removal moved to the bottom-right corner of the image, reducing obstruction of the top-right action buttons and image content. * **Zen Mode site adaptation and exit entry improved**: Unified Zen Mode configuration across sites, adding default hidden elements for more AI sites; enabling it directly hides sidebar, disclaimers, and distraction areas, with a fixed floating "Exit Zen Mode" entry at the top level of the page. * **Zen Mode shortcut and collapsed state compatibility**: Added "Toggle Zen Mode" in "Settings โ†’ Shortcuts โ†’ Interaction Controls" with default shortcut `Ctrl + Shift + Z`; also improved Zen Mode layout behavior on Kimi and other sites with collapsed sidebars. * **Qwen Studio site name unified**: The display name of `chat.qwen.ai` unified to `Qwen Studio` across adapter display names, settings items, conversation hints, README, and issue templates. ### ๐Ÿ› Bug Fixes * **AI Studio theme fallback conflict**: Fixed AI Studio applying a generic fallback on top of already-completed native theme switching when "Sync native page colors" was enabled, causing theme class conflicts and style corruption. * **System theme preference lost on refresh for multiple sites**: Fixed DeepSeek, Qwen Studio, and ChatGLM reverting panel theme state to `light` on page refresh after switching to "Follow System" via Ophel, even though the `system` preference had been written to the site. * **Zen Mode component i18n disconnect**: Fixed the static-injected exit button text not updating when switching plugin language after Zen Mode was enabled. * **Userscript Gemini inline image watermark removal positioning fix**: For generated images on Gemini `/app` and `/share` pages that only have `blob:` / `data:` URLs, the watermark removal process now validates both `48px` and `96px` watermark candidates and their adjacent positions, only using a result when confirmed to improve quality. * **Userscript inline image result reuse**: Auto-display, preview zoom, copy, and download for the same Gemini inline image now reuse the same watermark-removed result to reduce inconsistency across different entry points. **v1.0.35** ### ๐Ÿš€ New Features * **Native page theme sync toggle**: Added "Sync Native Page Theme" toggle in "Appearance & Theme" to independently control whether Ophel theme changes also update the current site's light/dark mode and native colors; also added to global search index for direct navigation. ### โœจ Improvements * **Gemini user query image export**: Exported conversations now include images uploaded in Gemini user queries, preventing export results that only contain text prompts with missing reference images. ### ๐Ÿ› Bug Fixes * **ChatGPT thinking mode completion timing**: Introduced per-round completion detection logic for ChatGPT `thinking_effort` requests; normal replies continue using network monitoring, while standard/advanced thinking waits for the page to actually enter and exit the generating state before signaling completion, avoiding false "conversation complete" detection during the `stream_handoff` phase. ([#343](https://github.com/urzeye/ophel/issues/343)) * **Doubao conversation sync restored**: Adapted to Doubao's new sidebar DOM structure, restoring conversation list recognition, current conversation location, and new conversation entry sync, reducing sidebar feature failures caused by the official page update. ([#342](https://github.com/urzeye/ophel/issues/342)) * **Doubao outline and export structure adapted**: Switched to Doubao's new chat message area DOM, restoring outline extraction, latest reply extraction, and conversation export functions, preventing empty outlines or missing export content after the official update. ([#342](https://github.com/urzeye/ophel/issues/342)) * **Gemini image Markdown export restored**: Compatible with Gemini's new generated image structure, correctly preserving generated images in replies when exporting Markdown, no longer losing images due to wrapper changes or temporary `blob:` URLs. ([#339](https://github.com/urzeye/ophel/issues/339)) * **Gemini watermark removal compatible with new image components**: Watermark removal now supports Gemini's new generated image component structure, compatible with new image cards, copy buttons, and "Download full size image" buttons. * **Gemini conversation image watermark misidentification fix**: Adjusted Gemini watermark size detection logic to prioritize `48px` watermark config when preview image source is detected on `/app` conversation pages. ([#335](https://github.com/urzeye/ophel/issues/335)) * **Extension update notification z-index fix**: Raised the z-index of the "plugin updated" notification card to prevent it from being covered when the panel or quick overlays are open. * **Grok user query width alignment fix**: Fixed Grok user query bubbles being incorrectly centered instead of right-aligned after enabling "User Query Width". * **Grok content area width abnormal shrinkage**: Fixed `--content-max-width` being applied redundantly on nested containers during Grok page width adjustment, causing the latest conversation content to be noticeably narrower than older messages. **v1.0.34** ### ๐Ÿ› Bug Fixes * **Firefox idle callback compatibility**: Fixed errors in Firefox caused by calling `requestIdleCallback` / `cancelIdleCallback` without the `window` context, preventing `TypeError` during outline scroll sync. * **Theme sync hydration race condition**: Delayed theme callback registration and theme listener startup to ensure theme state writes only happen after settings hydration is complete, reducing the risk of disclaimer dialogs reappearing or settings being overwritten by defaults on Firefox after switching to dark or "Follow System" mode. ([#333](https://github.com/urzeye/ophel/issues/333)) **v1.0.33** ### ๐Ÿ› Bug Fixes * **Site width toggle not working**: Fixed the "Enable Page Width" and "Enable User Query Width" toggles not opening for ChatGPT, Claude, and other sites in "Site Settings". Width config normalization now preserves already-saved site keys, preventing saved configs for sites not in the default table from being accidentally overwritten. ([#330](https://github.com/urzeye/ophel/issues/330)) **v1.0.32** ### ๐Ÿ› Bug Fixes * **Userscript settings reverting to defaults**: Fixed userscript resetting the entire config to defaults whenever any setting was changed after a page refresh; tightened `settings-store` preview state and hydration persistence timing to prevent temporary state from overwriting saved settings. * **Userscript legacy settings format compatibility**: Added compatibility for old userscript versions that stored the raw `settings` object directly in GM storage; upgrades now automatically wrap it in the structure required by Zustand `persist`, reducing settings failures caused by the old data format. * **Disclaimer false-positive fix**: Disclaimer dialog now waits for settings hydration to complete before evaluating display conditions, preventing userscript from incorrectly judging "not agreed" before settings are loaded and showing the dialog repeatedly. **v1.0.31** ### โœจ Improvements * **Doubao page width sync**: Page width control now also covers `--content-max-width` related containers and variables, fixing the bottom input box not changing when adjusting page width. * **Quick button group position memory**: The position of the quick button group after dragging is now automatically saved and restored after page refresh, reducing the need to reposition on every page visit. ([#293](https://github.com/urzeye/ophel/issues/293), [#3](https://github.com/urzeye/ophel/issues/3)) * **Quick button settings structure consolidation**: Quick button order, opacity, toolbox menu, floating toolbar state, and position are unified under `settings.quickButtons`, with compatibility for old configs scattered at the top level and old backup files. * **Layout settings converted to sliders**: Page width, user query width, default margin, panel width, panel height, and snap trigger distance now use slider controls with real-time value display, reducing input complexity. * **Width config unified to percentage**: Page width and user query width now use `%` config exclusively, with quick preset buttons removed from the bottom; default value restore entry added for consistent settings UX. * **Legacy width config auto-migration**: Old `px` width data from previous versions is automatically converted and migrated to the new percentage config after upgrading. ### ๐Ÿ› Bug Fixes * **Doubao native theme cleanup**: Removed native theme override style injection for Doubao to avoid continued reliance on the separately maintained theme adaptation file. * **Quick button group drift on zoom**: Improved positioning logic when the browser window is zoomed or resized; quick buttons now better maintain their relative position, reducing cases where they end up in the center of the page. * **Slider preview state lingering**: Fixed temporary preview values persisting when switching pages or closing the panel while dragging a slider in settings; unsubmitted preview states are now cleaned up when the component unmounts. **v1.0.30** ### ๐Ÿš€ New Features * Theme switching now also affects the native site (partial support, continuously improving) ### โœจ Improvements * Improved quick button background effect (glassmorphism transparency) **v1.0.29** ### โœจ Improvements * **Userscript bundle size reduction**: Userscript build now loads `react` and `react-dom` via CDN, and splits localization strings into external JSON resources, significantly reducing `ophel.user.js` bundle size, resolving Greasy Fork sync failures due to script length, without affecting the browser extension build. * **Userscript i18n load chain optimized**: Userscript now prioritizes initializing the current language resource on startup and automatically refreshes UI text when the language is changed, ensuring stable first-screen loading and switching experience with external language packs. ### ๐Ÿ› Bug Fixes * **Theme switch animation origin fix**: Fixed theme switch animation in quick buttons always starting from the top-right corner of the page; theme switching in both quick buttons and main panel now consistently radiates from the triggering button's position. **v1.0.28** ### ๐Ÿš€ New Features * **AI reply Mermaid fallback rendering**: Added Mermaid code block detection and rendering for sites without native support, with code/diagram toggle, zoom, fullscreen, and PNG download. ([#285](https://github.com/urzeye/ophel/issues/285)) ### โœจ Improvements * **KaTeX font size reduction**: Extension bundle now only includes `.woff2` fonts, reducing bundle size while maintaining Firefox compatibility. * **Mermaid toolbar experience**: Improved button icons, page and fullscreen viewing experience. * **Panel and outline icon refresh**: Upgraded Sparkle icon in panel header/collapsed entry and "Show user queries only" button in outline panel to more consistent SVG icons, with minor button size and hierarchy adjustments for better visibility in dark and light themes. * **Prompt icon system improved**: Redrawn prompt-related icons with a separate icon for the prompt queue, reducing visual confusion between different entry points. * **UI improvements**: Improved icon display and adjusted About page supported platforms section and related feature descriptions for better visual consistency and readability. * **Extension update notification improved**: When the browser extension detects a new version, a custom Ophel refresh notification card now appears at the bottom-right corner of the page, clearly indicating "Plugin Updated" with a one-click refresh entry, reducing confusion when users continue in old context after an update. ### ๐Ÿ› Bug Fixes * **Gemini Enterprise export noise cleanup**: Cleaned up unexpected noise content (extra style and status text) appearing in some Gemini Enterprise export results, improving output consistency and readability. * **Input focus stealing on native sites**: Fixed an issue where Ophel could steal input focus on native sites like ChatGPT in Firefox, causing the first character typed in the outline search box to lose focus and prevent continuous input. ([#304](https://github.com/urzeye/ophel/issues/304)) * **Unified focus protection**: Unified input focus protection logic across Settings, Global Search, Prompt Queue, and the main panel, while preserving local keyboard interactions (`Enter`, `Escape`, etc.) inside queue and modal dialogs. * **Duplicate update notification**: Fixed an issue where after extension updates, multiple notifications appeared simultaneously (Ophel's own notification, a fallback notice, and Plasmo's default "Context Invalidated, Press to Reload"), consolidated into a single update notification card. **v1.0.27** ### ๐Ÿš€ New Features * **User query math formula rendering**: User query Markdown rendering now supports detecting and displaying LaTeX math formulas (inline and block formulas). ([#299](https://github.com/urzeye/ophel/issues/299)) ### โœจ Improvements * **Export progress notification enhanced**: Unified improved export start toast text clearly reminding "please do not operate the current page during export", with slightly longer display time; synced in 10 languages to reduce accidental operations during long AI Studio and DeepSeek conversation exports. * **Markdown export header typography improved**: Adjusted spacing structure between the title and metadata block at the top of exported documents for better first-screen readability. ### ๐Ÿ› Bug Fixes * **AI Studio virtual scroll export misalignment**: Refactored round pairing and ordering logic for AI Studio exports during virtual scrolling, fixing user queries, thinking content, and AI replies being misaligned or stacked at the bottom of the document in long conversations. * **AI Studio export missing content and format issues**: Fixed empty off-screen replies, only exporting thinking without body, truncated user queries, and incomplete extraction of lists, quotes, inline code, code blocks, Markdown, and formulas during virtual scrolling. * **Export title polluted by tab renaming**: Fixed AI Studio export document title incorrectly using the browser tab title rewritten by the extension, now prioritizing the original conversation title; also added protection for Grok and the general export pipeline to avoid being overwritten by the current page title. **v1.0.26** ### ๐Ÿš€ New Features * **Gemini Voyager incremental import**: Added "Import from Gemini Voyager" in data management, flattening Voyager folder structures into path names and incrementally merging into the current Gemini account for easy migration from Voyager. ([#287](https://github.com/urzeye/ophel/issues/287)) ### โœจ Improvements * **Multi-line block formula delimiter format**: Adjusted block-level LaTeX wrapping rules so multi-line formulas use newline-wrapped `$$` delimiters when exporting Markdown, reducing adhesion to body text; double-click copy formula base delimiter logic also synchronized. ([#296](https://github.com/urzeye/ophel/issues/296)) ### ๐Ÿ› Bug Fixes * **DeepSeek page width sync**: Adjusted `chat.deepseek.com` page width control logic to unify the message area and bottom input box under the same `--message-list-max-width` variable, so the input box matches the message area when page width is expanded. ([#281](https://github.com/urzeye/ophel/issues/281)) * **Claude outline and scroll navigation broken**: Compatible with Claude's new chat scroll container structure, fixing empty outline extraction and broken "go to top / go to bottom / return to anchor" navigation based on scroll container. ([#291](https://github.com/urzeye/ophel/issues/291)) * **Gemini formula copy losing closing parenthesis**: Fixed double-clicking to copy LaTeX formulas on Gemini incorrectly removing `)` at the end of formulas; export pipeline not affected. ([#292](https://github.com/urzeye/ophel/issues/292)) * **Markdown export format fix**: Improved general `htmlToMarkdown()` conversion logic, fixing code block language titles being merged with content, code content being flattened to one line, and multi-level list first-level indent being lost when exporting/copying Markdown on ChatGPT and similar sites. ([#296](https://github.com/urzeye/ophel/issues/296)) **v1.0.25** ### ๐Ÿš€ New Features * **Yuanbao site support**: Added initial compatibility for `yuanbao.tencent.com`. ([#279](https://github.com/urzeye/ophel/issues/279)) ### ๐Ÿ› Bug Fixes * **Settings modal input focus protection**: Changed keyboard event capture interception for input controls in the settings modal to apply to all sites universally, fixing focus being stolen by native input boxes on some sites in Firefox environments in settings items like "Page Width Control". **v1.0.24** ### ๐Ÿš€ New Features * **Tencent ima site support**: Added initial compatibility for `ima.qq.com`. ([#275](https://github.com/urzeye/ophel/issues/275)) ### ๐Ÿ› Bug Fixes * **QwenAI international version width control**: Fixed "Page Width" and "User Query Width" settings not taking effect on `chat.qwen.ai`, now correctly overriding conversation container and user bubble width styles. * **DeepSeek width control**: Fixed page width control and user query width setting not taking effect on `chat.deepseek.com`, switched to overriding virtual list width variable and stable user message structure. ([#281](https://github.com/urzeye/ophel/issues/281)) **v1.0.23** ### ๐Ÿš€ New Features * **QwenAI international version support**: Added initial compatibility for `www.qianwen.com`. ([#240](https://github.com/urzeye/ophel/issues/240)) ### ๐Ÿ› Bug Fixes * **New conversation shortcut compatibility**: Fixed new conversation shortcut not working on macOS and some sites, and Doubao falling back to full page refresh. * **Advanced model settings search i18n**: Fixed advanced model usage stats related settings titles not being localized in global search results. **v1.0.22** ### โœจ Improvements * **Userscript external resource publishing**: Changed userscript styles, notification sounds, and watermark base images to hashed external static resources distributed via a separate `userscript-assets` release channel, preventing repeated bundling of the same resources in every GitHub Release. * **Tooltip capability consolidation**: Extracted a shared tooltip core, unifying styles, positioning, container selection, and hide timing between React panel and site injection scenarios, reducing duplicate implementations. * **Streaming request monitoring precision**: Narrowed the generation request matching conditions for ChatGPT, Grok, Kimi, and ChatGLM to reduce misidentifying regular network requests as AI streaming replies. ### ๐Ÿ› Bug Fixes * **Userscript resource loading stability**: Userscript now references stable external resource URLs, reducing publish risk from continued script size growth and providing a foundation for future versions to reuse unchanged resources. * **Gemini My Stuff userscript compatibility**: Fixed "Open in New Tab" hover button icon not rendering on the Gemini "My Stuff" page in userscript environment due to CSP / Trusted Types restrictions. * **Gemini My Stuff hover state lingering**: Fixed hover button and tooltip text still showing after clicking "Open in New Tab" and returning to the original page. * **Gemini Usage panel userscript compatibility**: Fixed the advanced model Usage stats panel continuously erroring on the Gemini page in userscript environment due to Trusted Types blocking `innerHTML`. * **Gemini user query rendering userscript compatibility**: Fixed Gemini user query Markdown rendering erroring in userscript environment due to Trusted Types blocking direct `innerHTML` assignment. * **Gemini Enterprise Shadow DOM compatibility**: Fixed user query Markdown preview failing in Shadow DOM scenario and advanced model Usage stats panel mounting issues causing missing styles and text appearing in the input area. * **Single-line Markdown user query rendering**: Relaxed user query Markdown detection to support single-line quotes, headings, lists, bold, inline code, and links triggering rendering normally. * **ThemeManager global singleton reuse**: Fixed `App` and core modules creating duplicate `ThemeManager` instances on page refresh, causing theme state competition and `[App] Global ThemeManager not found, creating fallback instance` warnings in console. * **Gemini refresh false positive completion notification**: Fixed Gemini standard and Gemini Enterprise occasionally incorrectly judging "AI generation complete" and showing completion notifications and playing sounds on page refresh. * **ChatGPT model lock compatible with new page**: Adapted to ChatGPT's new model selection menu, fixing the model lock repeatedly opening/closing the model dialog, old model names being mistakenly identified as the current model, and model name in tab title being unstable on the new page. * **DeepSeek deep thinking export and outline extraction**: Fixed outline, copy Markdown, and export Markdown incorrectly extracting thinking chain content when DeepSeek deep thinking is enabled; export results now respect the "Include thinking chain in export" setting. * **DeepSeek share conversation export**: Fixed `chat.deepseek.com/share/*` share page export showing "Please open a conversation to export" error, now directly recognizing share conversations and completing export. * **DeepSeek virtual scroll outline out of order**: Fixed AI reply headings occasionally being sorted before their corresponding user queries in DeepSeek long conversation virtual scroll scenarios. **v1.0.21** ### ๐Ÿš€ New Features * **Advanced model usage stats and local estimation**: Added local conversation counting and estimation panel for advanced models, with a history usage stats chart on the features page that can be viewed by site and hour, day, or month in counts or rough token estimates. ([#103](https://github.com/urzeye/ophel/issues/103), [#256](https://github.com/urzeye/ophel/issues/256)) by @KanameMadoka520 ### ๐Ÿ› Bug Fixes * Fixed userscript failing to load due to a name change; rolled back script name * Fixed DeepSeek virtual scroll causing missing outline and export format loss * Fixed DeepSeek not refreshing after deletion and Doubao conversation deletion not syncing to the original site * Fixed Doubao "Copy Latest Reply" having no content; upgraded multi-site "Copy Latest Reply" to Markdown extraction to preserve headings, bold, tables, formulas, and code blocks; compatible with DeepSeek / AI Studio virtual scroll and Gemini Enterprise Shadow DOM scenarios **v1.0.20** ### ๐Ÿš€ New Features * **Gemini MyStuff open in new tab**: Added an "Open in New Tab" button to media cards on the Gemini "My Content" page, supporting direct jump to the original conversation location. ([#185](https://github.com/urzeye/ophel/issues/185)) ### โœจ Improvements * **Shortcut cross-platform compatibility**: * Unified primary and secondary modifier key cross-platform semantics: Windows/Linux uses `Ctrl`/`Alt`, macOS uses `Command`/`Option`, improving consistency for multi-device shared configs. * Shortcut settings page and queue shortcut hints now uniformly display by physical key normalization; recording `Option + letter/number/common symbol` on macOS no longer shows abnormal display due to system special character input. * Fixed some shortcuts on macOS saving as `โˆ‚`, `โ€ `, `ยฌ` and other characters due to `Option` participating in special character input, causing display issues or unstable triggering. * Added compatibility migration for locally saved old shortcut configs, covering extension startup, settings page hydration, cross-page sync, and full settings replacement scenarios to reduce reconfiguration cost for existing users after upgrading. **v1.0.19** ### ๐Ÿš€ New Features * **Qianwen (Tongyi Qianwen) site support**: Added initial compatibility for `www.qianwen.com`. ([#189](https://github.com/urzeye/ophel/issues/189)) * **Prompt queue batch import**: Support pasting multiple items at once in the prompt queue, parsed as "split by line" or "custom delimiter" and batch-enqueued; the first item is sent immediately when AI is idle, remaining items auto-queue and send in sequence. ([#223](https://github.com/urzeye/ophel/issues/223)) ### โœจ Improvements * **Completion notification enhanced**: Added 3 built-in notification sound presets with configurable play count and interval, automatically stopping repeated playback when the user returns to the page. ([#228](https://github.com/urzeye/ophel/issues/228)) * **i18n text completed**: Completed missing and residual English text in German, Spanish, French, Japanese, Korean, Portuguese, and Russian, unifying multilingual display experience. ### ๐Ÿ› Bug Fixes * Fixed unstable go-to-top, go-to-bottom, return-to-anchor, outline scroll follow, and highlight state on DeepSeek and Z.ai in some long conversations. ([#241](https://github.com/urzeye/ophel/issues/241)) * Fixed Gemini page repeatedly resetting tab title to `Google Gemini` in the background, causing flickering conflicts with the auto-rename logic. * Fixed shortcut conflict hint falling back to Chinese in non-Chinese languages due to empty text. * Fixed Korean shortcut list missing `shortcutShowShortcuts` text. * Fixed Spanish panel title still containing old brand name `Gemini Helper`. **v1.0.18** ### ๐Ÿš€ New Features * **Z.ai site support**: Added initial compatibility for `chat.z.ai`. ([#218](https://github.com/urzeye/ophel/issues/218)) ### โœจ Improvements * Temporarily hidden "Manual Anchor" settings and quick button to reduce user confusion * Improved Gemini and AI Studio Markdown table rendering styles after enabling page width expansion * Popup site support list aligned with adapters, quick access now shows all supported sites ### ๐Ÿ› Bug Fixes * Limit user query image sizes when "User query Markdown rendering" is enabled. ([#224](https://github.com/urzeye/ophel/issues/224)) by @tjsky * Fixed floating toolbar being pushed outside the visible area after dragging to the screen edge and then resizing the window. ([#221](https://github.com/urzeye/ophel/issues/221)) * Fixed Grok conversation sync incorrectly treating command panel Actions as conversations * Fixed Grok pin recognition logic to prevent all pinned/unpinned anomalies after sync **v1.0.17** ### ๐Ÿš€ New Features * **ChatGLM site support**: Added initial compatibility for `chatglm.cn`. ### โœจ Improvements * i18n improvement: "Inbox" internationalization adaptation **v1.0.16** ### ๐Ÿš€ New Features * **Kimi site support (initial)**: Added complete initial site support for `www.kimi.com` ### โœจ Improvements ### ๐Ÿ› Bug Fixes **v1.0.15** ### ๐Ÿš€ New Features * **Global search shortcut customizable**: Added `openGlobalSearch` configurable action, default key `Ctrl+K` (shown as `โŒ˜K` on Mac), configurable in "Shortcuts โ†’ Interaction Controls". * **Global search settings direct shortcut**: Added "Global Search Shortcut" setting in "Global Search โ†’ Search Matching" with a one-click jump to shortcut settings and highlight to the corresponding key row. * **DeepSeek site support**: Added initial compatibility for `chat.deepseek.com`. ### โœจ Improvements * **Dynamic trigger hint**: The trigger description at the top of the global search page changed from fixed text to dynamically assembled, reflecting the current user config (double Shift / custom key) in real time. * **Delete shortcut scenario compatibility**: When user removes the global search shortcut, the trigger description automatically degrades to show available trigger methods; shows "Not set" if all are disabled. * **Conversation sync result diagnostics enhanced**: After manual sync, new "scanned/added/updated" result hints are shown; clear guidance is provided when no conversations are detected in the sidebar; and update count calculation and metadata backfill write logic are corrected. by @joevalleyfield * **DeepSeek conversation sync enhanced**: Added conversation rename sync, link and CID backfill updates, and pinned conversation recognition with support for distinguishing pinned/normal conversation groups. * **DeepSeek generation state monitoring**: Integrated DeepSeek streaming generation request monitoring for more timely generation start/end state, more accurate tab state and completion notification pipeline. ### ๐ŸŒ Internationalization * **10 language text completed**: Completed and synced `globalSearchTriggerHint` template text, `globalSearchTriggerDoubleShift`, and "Global Search Shortcut" jump item (title/description/button) key values in 10 languages. ### ๐Ÿ› Bug Fixes * **Settings search missing items**: Added "Shortcuts", "Global Search", "Conversation sync delete" and other previously unsearchable config items to settings search, with support for finding by name and keywords. * **Shortcut settings search stability**: Shortcut entry index now dynamically generated from metadata; no manual maintenance needed when adding/adjusting shortcuts in the future, reducing miss risk. * **DeepSeek send button misidentification**: Fixed send button selector incorrectly matching the attachment button, with added fallback to simulate `Enter` / `Ctrl+Enter` when using send shortcut for better compatibility. * **ChatGPT Projects export failure**: Fixed "Export Markdown / Copy Markdown" failing in Projects conversations with `Conversation not found` error because project conversations weren't synced to local index; now immediately supplements conversation metadata from the current page before exporting. **v1.0.14** ### ๐Ÿš€ New Features * **Doubao (ByteDance) support**: Ophel now fully supports Doubao, ByteDance's AI assistant. ### ๐Ÿ› Bug Fixes * **Backup restore data loss**: Fixed restored backup data being overwritten by empty data from open AI pages that still had old data in memory after restore. Now automatically notifies all open AI pages to refresh after successful restore and skips the first auto-sync to keep restored data clean. * **Backup export/import data structure errors**: Fixed `lastUsedFolderId` and other auxiliary properties being lost on export, and a condition error preventing correct restoration of backups with 2+ conversations on import. * **Reading history restore structure compatibility**: Fixed `readingHistory` being incorrectly wrapped as `{ readingHistory: ... }` during local import and WebDAV restore; now correctly restores as `{ history, lastCleanupRun }` to prevent reading history loss. * **WebDAV restore status writeback fix**: Fixed `lastSyncStatus` remaining at `syncing` after successful download restore; now correctly writes back `lastSyncTime` and `lastSyncStatus: success`. * **Gemini cross-browser import invisible conversations**: Upgraded Gemini conversation isolation from numeric `cid` (`/u/n`) to account email priority, with automatic migration from old data (numeric `cid` โ†’ email `cid`) on first Gemini open after upgrade, supporting `u/0` to `u/1` cross-browser import scenarios. * **Import backup module load error**: Fixed `Cannot find module` error during dynamic import of the validation module in local import and WebDAV restore pipelines; switched to static import for stable availability in build artifacts. * **Import failure diagnosis**: Added clear console error logs for import parse and write failures, with actual error message shown in Toast for easier issue identification. * **Import confirm dialog and i18n text**: Improved "backup time/type" info display style in the import confirm dialog; added and completed "Type" and "Open AI pages will be refreshed" key values in 10 languages. **v1.0.13** ### ๐Ÿš€ New Features * **Zen Mode**: Added Zen Mode setting to hide unnecessary page elements (such as model disclaimers at the bottom) for a purer conversation interface experience. ### ๐Ÿ› Bug Fixes * **Gemini Enterprise prompt queue fix**: Fixed prompt queue on Gemini Enterprise after the page update โ€” prompts were not being inserted into the native input box, incorrectly triggering the voice button causing "Could not recognize your speech" error. * Fixed global Enter key capture listener intercepting Enter events in the queue input box, causing content to be submitted without being inserted. * Fixed `findTextarea()` incorrectly matching the extension's own queue input (`gh-queue-input`) instead of the Gemini Enterprise ProseMirror editor. * Fixed submit button selector missing the "Send" label, unable to match the redesigned send button. * Fixed submission confirmation logic timing out and retrying due to editor placeholder "Continue asking" being mistaken for empty content. * **WebDAV backup display fix**: Fixed backup list not showing on non-Jianguoyun WebDAV servers (e.g. Nextcloud, Synology, Aliyun Drive WebDAV) due to XML namespace prefix parsing failure. **v1.0.12** ### ๐Ÿš€ New Features * **Prompt Queue**: A seamless new interaction experience that keeps your train of thought uninterrupted while AI is generating. * **Smart queue mechanism**: When entering prompts via the floating window, if AI is idle the prompt is sent immediately; if AI is generating, the prompt is automatically added to the floating queue and sent in sequence when AI is idle again. * **Immersive floating window (Ghost UI)**: Floats above the native input box providing a queue overview. Supports external invocation; double-clicking a prompt in the Prompts panel also uses this queue mechanism. * **Full management actions**: Supports one-click clear, delete, jump-send (force send), and displays an "Edit" button on hover before sending to support inline editing of multi-line long text. * **Highly customizable and adaptive**: Supports globally custom invocation shortcut (default `Alt+J`); the floating input box seamlessly expands width and height based on input content; bottom tip for closing guide. * **Deep infrastructure integration**: Global search (Double Shift) fully covers "Prompt Queue" settings; search and multilingual translation synchronized. * **Prompt variable advanced usage**: Added default value and dropdown selection syntax support for prompt variables. * `{{variable:default_value}}`: Variable dialog pre-fills the default value on open for quick confirmation. * `{{variable:option1|option2|option3}}`: Variable dialog presents a dropdown selector for precise preset option selection. * Fully backward compatible with basic `{{variable}}` syntax; no need to modify existing prompts. ### ๐Ÿ› Bug Fixes * **Prompt variables multilingual support**: Fixed prompt variables (`{{variable_name}}`) only supporting English letters and numbers; now fully supports Chinese, Japanese, Korean, Russian, and all languages and special characters. * **Gemini Enterprise theme switch**: Fixed "Settings and Help" button not clickable due to Gemini Enterprise page update, which prevented theme-following-system switching. **v1.0.11** ### New Features * Added `Include thinking chain in export` toggle in export settings (enabled by default), supporting optional inclusion or exclusion of thinking chain content. * Added export lifecycle capability: site adapters can implement pre-export preparation and post-export restoration, providing a unified extension point for future cross-site export enhancements. ### Improvements * Gemini (standard) export now supports auto-expanding thinking chains in conversations and restoring original collapsed state and reading position after export. * Gemini (standard) thinking chain export now presented as Markdown blockquote (`>`), clearly separated from the body and avoiding duplicate content. * Global search settings retrieval now always uses the complete settings set for scoring, improving settings title hit rate in multilingual interfaces. * Added `export-include-thoughts` settings index and title mapping to global search for direct location by name and keywords. * Conversation list information density improved: title and tags now on the same line, preventing blank second-line placeholder for conversations without tags. * Removed update time display from conversation list to prioritize title and tag information in the visible space. * Multi-tag collapse enhanced: continues to show `+N` when tags exceed displayable count, with hover support to view full tag list (with tag colors and names). * Narrow panel adaptation: automatically tightens tag display strategy at narrower widths to ensure title readability. * Conversation action entry improved: right-side action buttons use lighter hover show/hide interaction to reduce interference with main information in default state. ### Bug Fixes * Gemini (standard) outline extraction now filters `cdk-visually-hidden` auxiliary headings, fixing language-related hidden headings like "Gemini says" incorrectly appearing in the outline. * Gemini (standard) export Markdown now cleans `cdk-visually-hidden` nodes before export to prevent auxiliary hidden headings from appearing in exported files. * Added 10-language key values for `Include thinking chain in export` related text, fixing missing settings text in non-Chinese/English environments. **v1.0.10** ### New Features * Conversation management added "Cloud sync delete" capability, supporting batch trigger to also delete conversations from the site cloud after sync. * Settings page sync delete text and capability description unified to a cross-site model for easier future expansion. * Allow disabling double Shift global search shortcut. ### Improvements * ChatGPT sync delete pipeline simplified and standardized reason codes, reducing redundant logic and debug branches. * Claude organization ID parsing switched to environment-based routing with API fallback, improving plugin and script environment compatibility. * Grok now uses API/UI dual-channel delete strategy; when cloud sync is enabled, page refreshes automatically after delete to keep the list consistent. ### Bug Fixes * Fixed inaccurate remote failure count in conversation batch delete stats. * Fixed Gemini / Gemini Enterprise UI delete flow stability issues, covering menu trigger, delete click, and completion state detection. * Fixed Gemini Enterprise cloud delete success not removing local conversation in time. * Fixed AI Studio cloud delete API instability causing rollback; switched to stable UI delete path. **v1.0.9** ### ๐Ÿš€ New Features ### โœจ Improvements * Create/edit prompt dialog now disallows clicking overlay to close; retains button close and `Esc` close, preventing accidental close when releasing mouse outside the dialog after text selection. * Category management dialog and "Rename category" input dialog unified to disallow overlay close for consistent interaction behavior. * `ConfirmDialog` and `InputDialog` added `closeOnOverlayClick` config to control whether clicking overlay closes the dialog per scenario. * `VariableInputDialog` integrated with shared `DialogOverlay`, unifying Portal, keyboard close, and overlay interaction behavior. * Fixed `Esc` close order for multi-layer dialogs, now always closing the topmost dialog first. * Global search result area refactored to "context bar + non-floating group titles", keeping main content fully visible during keyboard up/down navigation without group title obstruction. * Global search keyboard navigation scroll strategy upgraded to "safe zone scroll", keeping highlighted items stably within the visible safe area, reducing edge jitter and jumpy feel. * Global search added `combobox / listbox / option` ARIA semantics and `aria-activedescendant` linkage for improved keyboard and screen reader accessibility. * Global search top-right shortcut label unified to `โŒจ Ctrl+K / double shift`, with `Ctrl+K` weak hint added to search input placeholder for better shortcut discoverability. * Added "contextual reminder" light hint: when user opens global search via UI, hints "next time press shortcut to open quickly" with support for dismissal and "don't show again". * Contextual reminder frequency control and auto-convergence strategy: max once per day, total count limit, auto-dismiss, auto-stops reminding after shortcut usage threshold is reached. * Global search context meta text changed to semantic expression (e.g. "Item X ยท Showing Y/Z"), reducing new user comprehension cost. * Global search result area scroll improved: fixed horizontal overflow and beautified vertical scrollbar style for visual consistency. * Global search hit reason tags completed: conversations (title/folder/tag), outline (title/type/number), prompts (title/category/content/ID), settings (name/keyword/ID/alias). * Global search sort strategy enhanced: sorted by "exact match > prefix match > contains match > combined score > recent use", reducing misclicks and improving first-screen relevance. * Prompts now show a one-line hit snippet preview with "Content hit:" prefix and keyword highlighting when matched by content. * Fixed hit reason text garbled in multiple languages; unified 10-language text readability. * Global search added "Fuzzy Search" capability (optional toggle) supporting spell-error-tolerant fallback matching, with "fuzzy match" label in results. * Fuzzy match results show differentiated highlight style (distinct from exact match) to reduce misidentification cost. * Global search "Fuzzy Search" default changed to off; users can enable in "Settings โ†’ Global Search" as needed. ### ๐Ÿ› Bug Fixes * **Gemini watermark removal (standard)**: Fixed copy/download pipeline still getting watermarked or non-full-size images in some scenarios; unified to prioritize full-size watermark-removed results with safe fallback for copy pipeline. * **Gemini watermark removal compatibility**: Improved extension and userscript interception strategy, cleaned up debug remnants, improved stability and consistency. * Added `.gh-dialog-overlay` recognition in panel auto-hide and Portal active detection to prevent panel from being incorrectly retracted when dialog is open in Tampermonkey environment. * Fixed global search `ArrowUp` navigation being covered by floating group titles. * Fixed global search result area showing horizontal scrollbar at certain widths. **v1.0.8** ### ๐Ÿš€ New Features * Added Search Everywhere global search dialog, triggered by double Shift / Ctrl(Cmd)+K, covering categories: All, Outline, Conversations, Prompts, Settings. * Settings page added "Site Settings โ†’ Global Search" config page with prompt Enter behavior config (Smart/Locate only) and trigger method description. * Quick button group added "Search" button (enabled by default) below the toolbox button for one-click global search access. * Supports settings deep link location (page + sub-tab + row highlight) for precise navigation to specific settings. ![search](https://github.com/user-attachments/assets/4e004b47-98de-4d14-a3d7-60993ed85b1f) ### ๐ŸŽจ UI & Interaction Upgrades * Global search category bar and results area layout improved with category counts, All group rate limiting, and "Show more". * Search results unified hit highlight style; conversation result meta info on one line (site/folder/tag). * Outline results enhanced user query and AI reply hierarchy distinction for better readability. * Fixed hover highlight jumping during rapid scroll (short-term hover lock). ### ๐Ÿ› Bug Fixes * Fixed abnormal search result category height and keyboard up/down navigation not scrolling to visible area. * Fixed global search text and category display inconsistency in multiple languages. * Fixed global search results not refreshing in time after conversation switch or outline delayed load. * Fixed inconsistent prompt search Enter behavior across scenarios (no variable: insert directly; with variable: open fill dialog). * Fixed folder name emoji double display and dropdown text alignment; extracted shared `SelectDropdown` component for unified dropdown style. ### ๐ŸŒ Internationalization * Completed key values for all new global search text in 10 languages, including categories, empty states, prompt behavior, site names, and in-page hints. **v1.0.7** ### ๐Ÿš€ New Features * Added "Settings โ†’ Features โ†’ Prompts Tab" config: `Double-click prompt to send directly` (off by default); when enabled, double-clicking a prompt sends it directly; prompts with variables auto-send after variable confirmation * Support custom send shortcut (Enter / Ctrl+Enter) [#59](https://github.com/urzeye/ophel/issues/59) ### ๐ŸŽจ UI & Interaction Upgrades * **Outline visual overhaul (Focus Card)**: * **Card design**: Completely refactored "user query" display style in the outline, using a refined card style (Focus Card) to stand out among headings. * **Visual anchor**: Added a left-floating "Pill Indicator" for clear visual rhythm in long lists. * **Interaction feedback**: Removed old highlight right-side vertical bar; replaced with **border color change and subtle glow** that better matches the card metaphor for immersive feedback during sync scrolling (Sync) and manual positioning (Locate). * **Dark mode adaptation**: All card colors, shadows, and highlight effects are theme-adaptive, perfectly supporting dark/black modes without jarring white backgrounds. ### ๐Ÿ› Bug Fixes * **Outline highlight fix**: Fixed AI reply headings showing square corners in manual Locate mode (caused by sync style overriding), all highlight states now maintain perfect rounded rectangles. * **Theme style improvements**: * **Dark mode upgrade**: Improved brand gradient colors for Classic Dark, Aurora, Cyberpunk, and other dark themes by reducing brightness to minimize glare and improve reading comfort. * **Button visual unification**: Refactored "Add Prompt" button style to match the bottom navigation button style (header background + hover shadow) for high UI language consistency. * **Contrast fix**: Fixed text contrast in dark mode to ensure bottom navigation buttons and other elements are clearly visible. * **Export filename optimization**: Changed export timestamp format from `YYYYMMDD_HHmmss` to more readable `YYYY-MM-DD_HH-mm-ss` for easier file management. ### ๐Ÿ“œ License & Documentation * **Open source license switch**: Project license migrated from `CC BY-NC-SA 4.0` to `GNU GPLv3`, with `package.json` SPDX identifier updated to `GPL-3.0-only`. * **License text updated**: `LICENSE` file replaced with official GPLv3 text with copyright attribution. * **Multilingual docs synced**: Main README and multilingual READMEs under `.github/readmes` updated to unified license badge and license description. * **Authorization notice cleaned**: Removed "contact for commercial license" text from README to avoid ambiguity with GPL terms. **v1.0.6** ### ๐Ÿš€ New Features * **System theme mode**: Added Follow System Theme, keeping panel and page theme in sync (including Gemini Enterprise system theme detection and switching). * **System switch animation**: Consistent theme switch animation experience when manually switching to system mode. * **New quick toolbox**: Added new entry point in button group operations, improving convenience for certain actions * **Toolbox customization**: Added toolbox menu configuration, allowing users to freely customize buttons shown in the toolbox. * **Auto full sync**: Changed to trigger based on whether current site/team data is empty, preventing false blocking by other site historical data. * **Full sync stability**: Added sidebar ready wait and multi-round scroll sync to improve completeness in lazy-load scenarios. * **Quick button transparency**: Added overall quick button group transparency adjustment (40%โ€“100%) to reduce obstruction. * **Quick button drag interaction**: Long-press shows progress hint, drag trigger clearer; drag position no longer persisted, switching panel position resets. * **Export enhancements**: Support custom export filename (with automatic site prefix), Markdown content starts with H1 heading, and optional filename timestamp suffix. ### ๐Ÿ› Bug Fixes * **Grok manual sync**: Fixed shortcut error when closing the "View All" dialog. * **Multilingual sync**: Synced and completed missing translations for German, Spanish, French, Japanese, Korean, Portuguese, and Russian. * **Code quality**: Fixed type definition issues in the export module. ### ๐Ÿ”ง Improvements * **Config experience**: Moved toolbox settings to the "Basic Settings" page; added "Settings" button inside toolbox to directly open config dialog without navigating to a new tab. * **Internationalization**: Toolbox menu and config items fully support 10-language display. * **Export text**: Optimized "Export" button text to "Export Markdown" for clearer intent. * **Settings improvements**: Improved export settings UI interaction, moved "Convert images to Base64" option to the bottom, improved input box experience. **v1.0.5** ### ๐Ÿš€ New Features * **Outline word count**: * **Reply word count**: In the outline panel, each user query shows the word count of the corresponding AI reply (e.g. `1.2k`, `3.5k`) for quick content volume assessment. * **Heading word count**: Each heading node also shows the word count of its sub-content for content structure analysis. * **Thinking chain excluded**: Automatically excludes AI "thinking process" (Thinking/Reasoning) content, counting only actual reply word count. * **Optional toggle**: New "Show word count" option in settings panel, enabled by default and can be disabled as needed. * **Format optimization**: Large numbers auto-formatted (1000 โ†’ 1k) for a clean interface. ### ๐Ÿ”ง Improvements * **AI Studio virtual scroll compatibility**: Added word count cache for AI Studio to solve word count loss caused by virtual scrolling. * **Outline highlight flow refactored**: Changed to data-driven flow for improved consistency and maintainability. * **Follow mode optimization**: Scroll highlight observer only enabled in follow mode, reducing unnecessary listeners. * **Scroll tracking stability**: Improved highlight visibility and scroll tracking stability. * **Dev experience**: Reduced hooks and logging related lint noise. * **Settings disabled hint**: Clicking a setting with unmet dependencies prompts to enable the prerequisite setting first, with hint throttling to prevent frequent popups. * **Quick button group optimization**: Improved button grouping and separator logic; anchor hints support localization; manual anchor button off by default. * **Quick button position sync**: When panel default position switches to left, quick button group also moves to the left. ### ๐Ÿ› Bug Fixes * **TypeScript type check**: Fixed `pnpm typecheck` failure due to missing error variable in `catch`. * **Markdown export**: Fixed Markdown structure loss when exporting files and copying to clipboard (headings/lists/code blocks etc. restored). * **Markdown export**: Fixed emoji garbled text (using Unicode codepoint + UTF-8 BOM to ensure correct encoding). * **Outline scroll tracking**: Fixed unstable scroll tracking in some scenarios. * **Outline navigation hint**: Overly long text is cleaned of whitespace and truncated to prevent hint overflow. ### โš ๏ธ Known Limitations * **Gemini Enterprise**: Due to Shadow DOM limitations, new replies require page refresh to correctly display word count. **v1.0.4** ### ๐Ÿš€ New Features * **Outline Favorites System**: * **Favorites**: Support bookmarking any outline node (click the star on the right side of the node) for quick access to important content. * **Filter mode**: New "Favorites Mode" toggle in toolbar; when enabled, only favorited content and its context is shown. * **Smart context**: Favorites mode automatically expands the path of favorited nodes and smartly hides irrelevant nodes for a clean view. * **Inline Bookmarks**: * **Instant bookmarking**: Bookmark icon shown directly next to user queries and AI reply headings in the main page content without opening the sidebar. * **State sync**: Inline bookmark actions fully sync with the outline panel; solid yellow star indicates bookmarked. * **Smart visibility**: Unbookmarked icons show semi-transparent, brightening on hover to minimize visual distraction. * **Global Custom Tooltip System**: * **Premium visual**: Introduced unified dark semi-transparent glassmorphism style tooltips, replacing native browser hints for a more refined and stable visual effect. * **Smart interaction**: Improved tooltip trigger logic for outline action buttons, supporting automatic hint switching when entering sub-buttons, and resolving layout jumps from nested triggers. * **Environment compatibility**: Resolved style loss issues for dialogs (Portaled Dialogs) in Shadow DOM environments. * **UI Visual Upgrade**: * **Icon improvements**: Redrawn toolbar and list icons using rounder, fuller style for improved refinement. * **Layout improvements**: Improved action icon (copy, bookmark) layout and gradient mask to prevent long text from blocking. * **Search box highlight**: Unified focus style for prompt and outline search boxes, using theme blue instead of browser default black border for stronger interaction feel. * **Outline shortcut enhancements**: * New `Alt + C`: Quick toggle outline favorites mode. * New `Alt + Shift + 4/5/6`: One-click expand outline to deeper levels (4โ€“6). * New `Alt + Shift + Q`: One-click show only user queries (auto-enables display and resets expand level). * **Panel width customization**: New panel width setting, adjustable from 200px to 600px. * **Panel snap optimization**: Improved edge snap hide logic; snap always maintains 10px exposure regardless of panel width. ### ๐Ÿ”ง Improvements * **All-language text improvement**: Ambiguous "Toggle Panel" text unified across all 10 languages to the clearer "Expand/Collapse Panel" for more explicit interaction intent. * **Tooltip performance**: Improved tooltip component measurement and positioning algorithm, supporting `disabled` prop for dynamic disabling. * **Text truncation**: Unified outline text truncation to 200 characters across all site adapters, removing hardcoded "..." suffix (handled by CSS). * **Full node copy**: Enhanced copy functionality to support full text copy of all outline nodes (including regular headings and user queries) with smart full text extraction. * **Config experience upgrade**: * Introduced `NumberInput` component to completely resolve conflicts between settings input boxes and Chinese input methods, and focus loss issues. * Adjusted panel default height to 85vh for a more comfortable visual experience. * Expanded panel default margin adjustable range to 0โ€“400px. * Optimized snap trigger threshold default to 18px to reduce accidental triggering. * **Panel interaction**: Improved panel behavior when clicking outside in "Edge Snap" mode; now retracts to edge instead of minimizing to floating ball. * **Settings text**: "Auto-hide on click outside" description now dynamically updates based on snap state for more accurate interaction feedback. * **Anchor state unified**: Refactored anchor management to use global `anchorStore` instead of scattered component states, resolving anchor state desync between panel buttons, shortcuts, and QuickButtons. ### ๐Ÿ› Bug Fixes * **UI fix**: Fixed missing class name in prompt search box causing focus style failure. * **Outline follow**: Enhanced scroll container detection to fix outline not correctly following reading progress on some sites. by @urzeye * **Markdown fix**: Resolved Markdown rendering fix compatibility issues in streaming output scenarios. by @urzeye * **Settings sync**: Fixed settings page input values potentially being overwritten by background sync during editing. by @urzeye * **Position sync**: Fixed snap state being lost or not following correctly when switching panel default position in snap state. * **Init state**: Fixed panel not correctly maintaining snap state after page refresh with edge snap enabled. * **Outline navigation**: Fixed `Alt + โ†‘/โ†“` shortcut navigation potentially getting stuck on the same item or inaccurate jumps during continuous key presses; now uses "viewport distance check" to automatically distinguish continuous navigation from manual scrolling. * **AI Studio bookmark fix**: * **Side-Channel Hydration**: Resolved AI Studio virtual scroll/lazy load preventing retrieval of user query text, causing empty or missing outline titles; now intelligently backfills text via sidebar (`ms-prompt-scrollbar`). **v1.0.3** ### ๐Ÿš€ New Features * **ChatGPT Markdown fix**: Added ChatGPT bold text rendering fix, resolving Markdown `**bold**` not rendering correctly. by @urzeye ### ๐Ÿ› Bug Fixes * Support Gemini multi-account `/u/` URLs (keep single-user `/app` style). [#16](https://github.com/urzeye/ophel/issues/16) by @lanvent * **ChatGPT login issue**: Fixed ChatGPT not being able to log in normally. by @urzeye * **Release workflow**: Fixed missing previous version number in GitHub Release Full Changelog comparison link. by @urzeye ### ๐Ÿ”ง Improvements * **Adapter refactor**: Migrated Markdown fix config to adapter pattern for improved code maintainability. by @urzeye **v1.0.1** ### ๐Ÿš€ New Features * **Userscript support**: Complete build support for Tampermonkey/GreaseMonkey scripts, extending usage beyond browser extensions. * **Multilingual docs**: Published and synced detailed README docs in 8 additional languages (Japanese, Korean, Traditional Chinese, German, French, Spanish, Portuguese, Russian). * **Engineering**: Added Pull Request template to standardize community contributions. ### ๐Ÿ› Bug Fixes * **CI/CD**: Optimized documentation build workflow to avoid triggering unnecessary builds when only updating README files under the `docs` directory. * **Documentation**: Fixed missing "Demo", "Local Build", and "Star History" sections in multilingual docs. **v1.0.0** ### ๐ŸŽ‰ Initial Release This is the first official release of Ophel, providing comprehensive enhancement experience for Gemini, ChatGPT, Claude, Grok, and AI Studio. ### โœจ Core Features #### Smart Outline Navigation * Automatically parses AI reply content to generate a clickable table of contents outline * Supports multi-level heading hierarchy * Quick navigation to specific content positions #### Conversation Management * Organize conversations by folders * Batch conversation operations * Conversation search and location * Sync native sidebar pin state #### Prompt Library * Rich built-in prompt templates * Support custom creation and editing * Group management and quick search * One-click fill to input box #### Shortcut System * Rich keyboard shortcuts * Support custom key bindings * Covers common operation scenarios #### Themes & Appearance * 20+ carefully designed themes * Separate light/dark mode themes * Support custom page width #### Reading History Restore * Automatically saves reading position * Restores last reading progress on reopen * Intelligently distinguishes new content #### WebDAV Sync * Sync settings to personal WebDAV server * Multi-device config sharing * Full data control ### ๐ŸŒ Platform Support * **Gemini** - Full feature support * **Gemini Business** - Full feature support * **ChatGPT** - Full feature support * **Claude** - Full feature support * **Grok** - Full feature support * **AI Studio** - Full feature support ### ๐ŸŒ Multilingual Support * Simplified Chinese * Traditional Chinese * English * Deutsch * Espaรฑol * Franรงais * ๆ—ฅๆœฌ่ชž * ํ•œ๊ตญ์–ด * Portuguรชs * ะ ัƒััะบะธะน ### ๐Ÿ”’ Privacy Protection * All data stored locally * No remote data collection * No third-party tracking * Open source and transparent [1.2.12]: https://github.com/urzeye/ophel/releases/tag/v1.2.12 [1.2.11]: https://github.com/urzeye/ophel/releases/tag/v1.2.11 [1.2.10]: https://github.com/urzeye/ophel/releases/tag/v1.2.10 [1.2.9]: https://github.com/urzeye/ophel/releases/tag/v1.2.9 [1.2.8]: https://github.com/urzeye/ophel/releases/tag/v1.2.8 [1.2.7]: https://github.com/urzeye/ophel/releases/tag/v1.2.7 [1.2.6]: https://github.com/urzeye/ophel/releases/tag/v1.2.6 [1.2.5]: https://github.com/urzeye/ophel/releases/tag/v1.2.5 [1.2.4]: https://github.com/urzeye/ophel/releases/tag/v1.2.4 [1.2.3]: https://github.com/urzeye/ophel/releases/tag/v1.2.3 [1.2.2]: https://github.com/urzeye/ophel/releases/tag/v1.2.2 [1.2.1]: https://github.com/urzeye/ophel/releases/tag/v1.2.1 [1.2.0]: https://github.com/urzeye/ophel/releases/tag/v1.2.0 [1.1.8]: https://github.com/urzeye/ophel/releases/tag/v1.1.8 [1.1.7]: https://github.com/urzeye/ophel/releases/tag/v1.1.7 [1.1.6]: https://github.com/urzeye/ophel/releases/tag/v1.1.6 [1.1.5]: https://github.com/urzeye/ophel/releases/tag/v1.1.5 [1.1.4]: https://github.com/urzeye/ophel/releases/tag/v1.1.4 [1.1.3]: https://github.com/urzeye/ophel/releases/tag/v1.1.3 [1.1.2]: https://github.com/urzeye/ophel/releases/tag/v1.1.2 [1.1.1]: https://github.com/urzeye/ophel/releases/tag/v1.1.1 [1.1.0]: https://github.com/urzeye/ophel/releases/tag/v1.1.0 [1.0.60]: https://github.com/urzeye/ophel/releases/tag/v1.0.60 [1.0.59]: https://github.com/urzeye/ophel/releases/tag/v1.0.59 [1.0.58]: https://github.com/urzeye/ophel/releases/tag/v1.0.58 [1.0.57]: https://github.com/urzeye/ophel/releases/tag/v1.0.57 [1.0.56]: https://github.com/urzeye/ophel/releases/tag/v1.0.56 [1.0.55]: https://github.com/urzeye/ophel/releases/tag/v1.0.55 [1.0.54]: https://github.com/urzeye/ophel/releases/tag/v1.0.54 [1.0.53]: https://github.com/urzeye/ophel/releases/tag/v1.0.53 [1.0.52]: https://github.com/urzeye/ophel/releases/tag/v1.0.52 [1.0.51]: https://github.com/urzeye/ophel/releases/tag/v1.0.51 [1.0.50]: https://github.com/urzeye/ophel/releases/tag/v1.0.50 [1.0.49]: https://github.com/urzeye/ophel/releases/tag/v1.0.49 [1.0.48]: https://github.com/urzeye/ophel/releases/tag/v1.0.48 [1.0.47]: https://github.com/urzeye/ophel/releases/tag/v1.0.47 [1.0.46]: https://github.com/urzeye/ophel/releases/tag/v1.0.46 [1.0.45]: https://github.com/urzeye/ophel/releases/tag/v1.0.45 [1.0.44]: https://github.com/urzeye/ophel/releases/tag/v1.0.44 [1.0.43]: https://github.com/urzeye/ophel/releases/tag/v1.0.43 [1.0.42]: https://github.com/urzeye/ophel/releases/tag/v1.0.42 [1.0.41]: https://github.com/urzeye/ophel/releases/tag/v1.0.41 [1.0.40]: https://github.com/urzeye/ophel/releases/tag/v1.0.40 [1.0.39]: https://github.com/urzeye/ophel/releases/tag/v1.0.39 [1.0.38]: https://github.com/urzeye/ophel/releases/tag/v1.0.38 [1.0.37]: https://github.com/urzeye/ophel/releases/tag/v1.0.37 [1.0.36]: https://github.com/urzeye/ophel/releases/tag/v1.0.36 [1.0.35]: https://github.com/urzeye/ophel/releases/tag/v1.0.35 [1.0.34]: https://github.com/urzeye/ophel/releases/tag/v1.0.34 [1.0.33]: https://github.com/urzeye/ophel/releases/tag/v1.0.33 [1.0.32]: https://github.com/urzeye/ophel/releases/tag/v1.0.32 [1.0.31]: https://github.com/urzeye/ophel/releases/tag/v1.0.31 [1.0.30]: https://github.com/urzeye/ophel/releases/tag/v1.0.30 [1.0.29]: https://github.com/urzeye/ophel/releases/tag/v1.0.29 [1.0.28]: https://github.com/urzeye/ophel/releases/tag/v1.0.28 [1.0.27]: https://github.com/urzeye/ophel/releases/tag/v1.0.27 [1.0.26]: https://github.com/urzeye/ophel/releases/tag/v1.0.26 [1.0.25]: https://github.com/urzeye/ophel/releases/tag/v1.0.25 [1.0.24]: https://github.com/urzeye/ophel/releases/tag/v1.0.24 [1.0.23]: https://github.com/urzeye/ophel/releases/tag/v1.0.23 [1.0.22]: https://github.com/urzeye/ophel/releases/tag/v1.0.22 [1.0.21]: https://github.com/urzeye/ophel/releases/tag/v1.0.21 [1.0.20]: https://github.com/urzeye/ophel/releases/tag/v1.0.20 [1.0.19]: https://github.com/urzeye/ophel/releases/tag/v1.0.19 [1.0.18]: https://github.com/urzeye/ophel/releases/tag/v1.0.18 [1.0.17]: https://github.com/urzeye/ophel/releases/tag/v1.0.17 [1.0.16]: https://github.com/urzeye/ophel/releases/tag/v1.0.16 [1.0.15]: https://github.com/urzeye/ophel/releases/tag/v1.0.15 [1.0.14]: https://github.com/urzeye/ophel/releases/tag/v1.0.14 [1.0.13]: https://github.com/urzeye/ophel/releases/tag/v1.0.13 [1.0.12]: https://github.com/urzeye/ophel/releases/tag/v1.0.12 [1.0.11]: https://github.com/urzeye/ophel/releases/tag/v1.0.11 [1.0.10]: https://github.com/urzeye/ophel/releases/tag/v1.0.10 [1.0.9]: https://github.com/urzeye/ophel/releases/tag/v1.0.9 [1.0.8]: https://github.com/urzeye/ophel/releases/tag/v1.0.8 [1.0.7]: https://github.com/urzeye/ophel/releases/tag/v1.0.7 [1.0.6]: https://github.com/urzeye/ophel/releases/tag/v1.0.6 [1.0.5]: https://github.com/urzeye/ophel/releases/tag/v1.0.5 [1.0.4]: https://github.com/urzeye/ophel/releases/tag/v1.0.4 [1.0.3]: https://github.com/urzeye/ophel/releases/tag/v1.0.3 [1.0.1]: https://github.com/urzeye/ophel/releases/tag/v1.0.1 [1.0.0]: https://github.com/urzeye/ophel/releases/tag/v1.0.0 # Themes and appearance: 24 presets plus custom CSS Source: https://ophel.app/docs/customization/appearance Switch between light, dark, and system modes, pick from 24 built-in theme presets, or write your own CSS to fully control how the Ophel panel looks. Ophel gives you full control over how the panel looks. ![Appearance and theme settings โ€” theme preview and switcher](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/appearance/theme-preview-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=4b702242b11bf2630f73f373f2d07236) From a quick mode toggle to a palette of 24 built-in presets and an open CSS editor for pixel-level customization. All changes apply instantly without reloading the page. ## Light, dark, and system mode Ophel supports three color modes: * ![Light theme icon](/docs/images/icons/theme-light.svg) **Light** โ€” always use a light theme * ![Dark theme icon](/docs/images/icons/theme-dark.svg) **Dark** โ€” always use a dark theme * ![System theme icon](/docs/images/icons/theme-system.svg) **System** โ€” automatically match your operating system preference **How to switch modes:** **Keyboard shortcut** Press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to cycle between light and dark mode. **Quick buttons** Click the ![Theme button icon](/docs/images/icons/theme-system.svg) theme button in the floating quick buttons group. **Settings** Go to ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ Appearance** to choose presets for light and dark mode separately. ### Sync native page colors When this option is enabled, Ophel also adjusts some native element colors on the AI platform page to match the current light or dark mode โ€” for example, input fields and scrollbars that the platform exposes as themeable. This works only on supported sites. **Setting:** **Settings โ†’ Appearance โ†’ Sync Native Page Colors** (enabled by default) > [!NOTE] > > The site's light/dark mode always follows Ophel's active mode. This setting > controls only the additional adjustment of native element colors on the page โ€” > disable it if you notice visual conflicts on a particular site. ## Built-in theme presets Each mode comes with 12 presets. Click any preset card in **Settings โ†’ Appearance โ†’ Theme Presets** to apply it โ€” the transition uses a radial animation that expands from the point you clicked. **Light presets** **Dark presets** ## Choosing a theme 1. Open ![Settings icon](/docs/images/icons/settings.svg) **Settings** () 2. Go to **Appearance** 3. Under **Theme Presets**, find the **Light Mode** or **Dark Mode** section 4. Click any preset card to apply it ## Custom CSS For complete control over the panel's appearance, go to **Settings โ†’ Appearance โ†’ Custom Styles** and write your own CSS rules. The panel runs inside a **Shadow DOM**, which means your custom CSS is isolated from the AI platform's page styles โ€” your rules only affect the Ophel panel, nothing else on the page. The panel's built-in styles use CSS variables prefixed with `--gh-`. Override any of them inside a `:host` block: ```css theme={} :host { --gh-bg: #1a1a2e; --gh-primary: #e94560; --gh-text: #eaeaea; } ``` > [!NOTE] > > Changes to custom CSS apply instantly. You do not need to reload the page or > restart the extension. ### Key CSS variables | Variable | Controls | | - | - | | `--gh-bg` | Main panel background | | `--gh-bg-secondary` | Secondary background (sidebars, alternating rows) | | `--gh-text` | Primary text color | | `--gh-text-secondary` | Muted text color | | `--gh-primary` | Accent / active color (buttons, highlights) | | `--gh-border` | Border color | | `--gh-shadow` | Panel drop shadow | | `--gh-header-bg` | Panel header background (supports gradients) | | `--gh-danger` | Delete / destructive action color | | `--gh-hover` | Row hover background | > [!TIP] > > `--gh-header-bg` accepts any valid CSS value, including > `linear-gradient(...)`. Use it to give the panel header a custom gradient that > matches your preferred aesthetic. # Widescreen, Zen mode, Clean Mode, and panel layout Source: https://ophel.app/docs/customization/layout Customize page and message width, use Zen mode and Clean Mode to reduce clutter, and configure panel size and behavior โ€” all configured per site. Ophel gives you fine-grained control over how AI pages are displayed. You can widen the reading area to use your full monitor, independently adjust your message bubble width, hide page chrome with Zen mode, and reduce ads or redundant page elements with Clean Mode. Layout settings are configured per site so each platform has its own values. ## Page width Many AI platforms cap their content area to a narrow column, leaving wide margins on large screens. Ophel lets you set a custom maximum width to fill more of the screen. **Settings โ†’ Site Settings โ†’ Page Layout โ†’ Page Width Control** (applies to the current site) * **Unit**: percentage of viewport width * **Range**: 50%โ€“100% (sliders are capped at 99% to preserve a sliver of the original platform chrome) * Changes apply immediately; no page refresh needed. ### Smart Avoidance **Settings โ†’ Site Settings โ†’ Page Layout โ†’ Smart Avoidance** (applies to the current site) Smart Avoidance keeps the AI page visible while the Ophel panel is open. On supported sites, Ophel recalculates the chat safe area so messages, code blocks, input boxes, and right-side tool panels are not covered by the floating panel. Smart Avoidance works with Page Width and the panel's current side. If keeping the chat area visible requires more space than the page has, Ophel may cap the effective page width even when the Page Width slider is set higher. This is expected: the setting prioritizes keeping the conversation usable instead of letting content sit under the panel. ## User message width Your outgoing message bubbles have their own independent width control, separate from the overall content area. Widening them reduces the whitespace around your messages in conversations that use a wide content area. **Settings โ†’ Site Settings โ†’ Page Layout โ†’ User Query Width** (applies to the current site) ## Zen mode Zen mode hides platform UI elements outside the conversation โ€” sidebars, navigation bars, headers โ€” so your focus stays on the content. **How to enable:** **Keyboard shortcut** Press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to toggle Zen mode. **Floating button** Click the ![Zen mode icon](/docs/images/icons/eye.svg) **Zen** button in the floating button group. **Settings (persistent)** Enable ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ Site Settings โ†’ Page Layout โ†’ Zen Mode** to enter Zen mode automatically every time you open that site. > [!NOTE] > > Toggling Zen mode with the button or shortcut creates a temporary state that > may not survive a page refresh. Enable it in Settings for a persistent effect > on a specific site. ### Zen exit button When Zen mode is active, a small ![Exit Zen mode icon](/docs/images/icons/eye-closed.svg) exit button appears on screen so you can leave Zen mode without using the keyboard shortcut. You can hide this button in **Settings โ†’ Site Settings โ†’ Page Layout โ†’ Zen Mode** if you prefer to rely on the shortcut () alone. > [!NOTE] > > Zen mode hides elements based on Ophel's knowledge of each platform's DOM > structure. The effect may be incomplete on some sites. ## ![Clean Mode icon](/docs/images/icons/clean-mode.svg) Clean Mode Clean Mode hides page clutter such as disclaimers, ads, download prompts, promotional cards, and other non-conversation elements. It is enabled by default and configured per site. **Settings โ†’ Site Settings โ†’ Page Layout โ†’ Clean Mode** (applies to the current site) Clean Mode is narrower than Zen mode: it keeps the normal platform layout visible, but removes elements Ophel recognizes as redundant. Zen mode focuses more aggressively by hiding sidebars and navigation; when Zen mode is enabled, it also includes the clean effect. > [!NOTE] > > On ChatGPT, Clean Mode also hides sponsored cards when Ophel can identify > them. Since each platform can change its page structure, some promotional > elements may require future adapter updates. ## Panel size and position You can drag the panel by its title bar to reposition it anywhere on screen. **Double-clicking** the title bar toggles between ![Edge Snap icon](/docs/images/icons/snap-to-edge.svg) Edge Snap and ![Floating mode icon](/docs/images/icons/floating-mode.svg) Floating mode. Additional size and behavior settings are in ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ General โ†’ Panel**: | Setting | Description | Default | | - | - | - | | Panel mode | ![Edge Snap icon](/docs/images/icons/snap-to-edge.svg) Edge Snap or ![Floating mode icon](/docs/images/icons/floating-mode.svg) Floating | Floating | | Default Side | Left or right side of the screen | Right | | Panel Width | Saved panel width, 240โ€“600 px | 320 px | | Widen on hover (Beta) | Temporarily widens the Floating panel while your cursor or keyboard focus is on it (expand the Panel Width row to enable) | Off | | Hover width (Beta) | Temporary panel width used while hovering, 240โ€“600 px | 520 px | | Panel Height | 50โ€“100 vh | 85 vh | | Snap Threshold | How close to the edge a drag triggers snapping, 0โ€“400 px (Edge Snap mode only) | 30 px | | Default Margin | Initial distance between the Floating panel and the screen edge, 0โ€“400 px (Floating mode only) | 0 px | When in Edge Snap mode, hover over the corresponding screen edge to pop the panel out for a preview. Drag the title bar away from the edge to switch to Floating mode. ### Resize the Floating panel directly In Floating mode, a slim resize handle appears on the panel edge facing the page. Drag it to change **Panel width** without opening Settings. If the panel is on the right, drag the left edge; if the panel is on the left, drag the right edge. The new width is saved after you release the pointer. ### Temporary hover width Enable **Widen on hover** when you want more room for long outline headings, conversation titles, or prompt names only while you are reading the panel. The panel expands to **Hover width** while your cursor or keyboard focus is inside it, then returns to the saved **Panel width** when you leave. Hover widening only applies to Floating mode on devices with a mouse or trackpad. It does not change Edge Snap previews, launcher previews, or the saved panel width. If Smart Avoidance is enabled, temporary hover widening does not move the AI page; dragging the panel edge to save a new width does. # Keyboard shortcuts: customize every Ophel action Source: https://ophel.app/docs/customization/shortcuts View and remap every Ophel keyboard shortcut from Settings โ†’ Keyboard Shortcuts, with conflict detection and a master enable/disable toggle. Ophel provides keyboard shortcuts for nearly every action โ€” opening the panel, navigating the outline, managing conversations, triggering global search, and more. Every shortcut is customizable: you can remap keys, remove shortcuts you don't use, or disable all shortcuts at once with a single toggle. ## Viewing and editing shortcuts 1. Open **Settings** () 2. Go to **Keyboard Shortcuts** 3. Click any shortcut row to record a new key combination 4. Click **ร—** on a row to remove that shortcut entirely 5. Use the **Enable Custom Shortcuts** toggle at the top to disable all shortcuts at once Ophel checks for conflicts before saving. If a new key combination is already in use, the conflicting action is highlighted so you can change the shortcut or remove the old binding. Cross-platform key mapping Shortcuts show both Windows/Linux and Mac keys: `Ctrl` maps to `Command`, and `Alt` maps to `Option`. Prompt submit is the only exception: `Ctrl+Enter` remains `Ctrl+Enter` on Mac. ## Shortcut reference > **Panel** > > | Action | Default shortcut | > | - | - | > | ![Panel icon](/docs/images/icons/sparkle.svg) Toggle panel open/closed | | > | ![Panel mode icon](/docs/images/icons/snap-to-edge.svg) Toggle panel mode (Edge Snap / Floating) | | > | ![Outline icon](/docs/images/icons/outline.svg) Switch to Outline tab | | > | ![Conversations icon](/docs/images/icons/conversation.svg) Switch to Conversations tab | | > | ![Prompts icon](/docs/images/icons/prompt.svg) Switch to Prompts tab | | > | ![Theme icon](/docs/images/icons/theme-system.svg) Toggle light/dark theme | | > | ![Settings icon](/docs/images/icons/settings.svg) Open settings | | > | ![Keyboard icon](/docs/images/icons/keyboard.svg) Show shortcut reference | | > **Outline** > > | Action | Default shortcut | > | - | - | > | ![Refresh icon](/docs/images/icons/refresh.svg) Refresh outline | | > | ![Expand all icon](/docs/images/icons/expand-all.svg) Toggle expand all / collapse all | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 1 | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 2 | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 3 | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 4 | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 5 | | > | ![Outline level icon](/docs/images/icons/outline.svg) Expand to heading level 6 | | > | ![Previous heading icon](/docs/images/icons/arrow-up.svg) Jump to previous heading | | > | ![Next heading icon](/docs/images/icons/arrow-down.svg) Jump to next heading | | > | ![Questions icon](/docs/images/icons/user-query.svg) Toggle Questions filter | | > | ![Only questions icon](/docs/images/icons/user-query.svg) Only Questions mode | | > | ![Bookmark icon](/docs/images/icons/star.svg) Toggle Bookmarks filter | | > | ![Locate icon](/docs/images/icons/locate.svg) Locate current position in outline | | > | ![Search icon](/docs/images/icons/search.svg) Search outline | | > **Conversations** > > | Action | Default shortcut | > | - | - | > | ![New conversation icon](/docs/images/icons/conversation.svg) New conversation | | > | ![Refresh icon](/docs/images/icons/refresh.svg) Refresh conversation list | | > | ![Locate icon](/docs/images/icons/locate.svg) Locate current conversation | | > | ![Previous conversation icon](/docs/images/icons/chevron-up.svg) Go to previous conversation | | > | ![Next conversation icon](/docs/images/icons/chevron-down.svg) Go to next conversation | | > **Editing and actions** > > | Action | Default shortcut | > | - | - | > | ![Stop icon](/docs/images/icons/clear.svg) Stop AI generation | | > | ![Input focus icon](/docs/images/icons/edit.svg) Focus the input box | | > | ![Global search icon](/docs/images/icons/search.svg) Open global search | | > | ![Export icon](/docs/images/icons/export.svg) Export current conversation | | > | ![Copy icon](/docs/images/icons/copy.svg) Copy latest AI reply | | > | ![Copy code icon](/docs/images/icons/copy.svg) Copy last code block | | > | ![Scroll lock icon](/docs/images/icons/scroll-lock.svg) Toggle scroll lock | | > | ![Zen mode icon](/docs/images/icons/eye.svg) Toggle zen mode | | > | ![Prompt queue icon](/docs/images/icons/prompt-queue.svg) Toggle prompt queue | | > | ![Model selector icon](/docs/images/icons/model-lock.svg) Show model selector | | > **Navigation** > > | Action | Default shortcut | > | - | - | > | ![Scroll top icon](/docs/images/icons/scroll-top.svg) Scroll to top of conversation | | > | ![Scroll bottom icon](/docs/images/icons/scroll-bottom.svg) Scroll to bottom of conversation | | > | ![Anchor icon](/docs/images/icons/anchor.svg) Return to anchor position | | > **Site-specific** > > | Action | Default shortcut | > | - | - | > | ![Claude settings icon](/docs/images/icons/settings.svg) Open Claude settings | | > | ![Claude key switch icon](/docs/images/icons/keyboard.svg) Switch Claude session key | | > | ![Gemini settings icon](/docs/images/icons/settings.svg) Open Gemini settings | | > | ![Theme settings icon](/docs/images/icons/theme-system.svg) Open theme settings | | > | ![Model lock icon](/docs/images/icons/model-lock.svg) Open model lock settings | | ## Global URL In **Settings โ†’ Keyboard Shortcuts**, you can configure a **Global URL** โ€” a URL that a global browser shortcut (set in your browser's extension shortcuts page) will open. This lets you jump directly to any AI platform with a single keypress, even when your browser is focused on another tab. # Per-site settings: model lock, Markdown fixes, and Claude Source: https://ophel.app/docs/customization/site-settings Configure model lock, Markdown rendering fixes, Gemini watermark removal, Claude session key management, and usage monitoring on a per-site basis. Different AI platforms have different page structures, behaviors, and account models. Ophel lets you configure settings independently for each site rather than applying a single global configuration. Go to **Settings โ†’ Site Settings**: **Page Layout** and **Model Lock** apply to the site you are currently on, while the **Gemini**, **AI Studio**, **ChatGPT**, and **Claude** tabs hold each platform's own options. ## Model lock Model lock solves a common annoyance: manually switching back to your preferred model every time you open an AI platform. Once configured, Ophel checks the model selector after the page loads and switches to your target model automatically. If the target model isn't available on your account, Ophel leaves the current selection untouched. **To set up model lock:** 1. Open the target AI platform, then go to **Settings โ†’ Site Settings โ†’ Model Lock** 2. Toggle it on 3. Enter a keyword from the target model's name (matching is case-insensitive) > [!NOTE] > > The **Model Lock** tab only appears on sites that support it; on unsupported > sites (such as DeepSeek) it is not shown. > [!TIP] > > You only need part of the model name. Entering `flash` matches `Gemini 2.0 Flash`. If multiple models match, the first match is selected. Each site's model lock setting is independent, so you can configure different target models for different platforms. You can also toggle model lock for the current site quickly from ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Model lock icon](/docs/images/icons/model-lock.svg) **Model Lock**. > [!NOTE] > > If you manually switch to a different model during a session, model lock only kicks in again on the next page load โ€” it won't override your manual selection mid-session. **Supported sites:** | Site | URL | | - | - | | Gemini | gemini.google.com | | Gemini Enterprise | Enterprise accounts | | AI Studio | aistudio.google.com | | ChatGPT | chatgpt.com | | Claude | claude.ai | | Grok | grok.com | | Doubao | [www.doubao.com](http://www.doubao.com) | | Kimi | [www.kimi.com](http://www.kimi.com) | | Tongyi Qianwen | [www.qianwen.com](http://www.qianwen.com) | | Qwen Studio | chat.qwen.ai | | Yuanbao | yuanbao.tencent.com | | Z.ai | chat.z.ai | | ChatGLM | chatglm.cn | | ima | ima.qq.com | ## Markdown rendering fixes Some AI platforms have intermittent Markdown rendering bugs โ€” bold text failing to render is a common example. Ophel provides site-specific toggles to patch these issues without affecting other platforms. | Site | Path | Default | | - | - | - | | Gemini | Settings โ†’ Site Settings โ†’ Gemini โ†’ Markdown Bold Fix | Off | | AI Studio | Settings โ†’ Site Settings โ†’ AI Studio โ†’ Markdown Bold Fix | Off | | ChatGPT | Settings โ†’ Site Settings โ†’ ChatGPT โ†’ Markdown Bold Fix | Off | The fix is off by default on all three platforms โ€” enable it only when you actually see rendering problems. ## Gemini watermark removal When you export or screenshot a Gemini conversation, Gemini appends a "Created with Gemini" watermark. Ophel can strip this watermark automatically. **Settings โ†’ Site Settings โ†’ Gemini โ†’ Remove Image Watermark** > [!NOTE] > > Watermark removal requires the `` host permission, which Ophel will ask you to grant the first time you enable this setting. This permission lets Ophel intercept and modify the export request before it reaches the page. The setting is off by default. The same watermark removal option is also available for AI Studio under **Settings โ†’ Site Settings โ†’ AI Studio โ†’ Remove Image Watermark**. ## Gemini Enterprise: policy retry **Settings โ†’ Site Settings โ†’ Gemini**, in the Gemini Enterprise section: | Setting | Description | Default | | - | - | - | | Auto-retry on Policy Block | Automatically retry requests blocked by enterprise content policies (for false-positive triggers) | Off | | Max Retries | Maximum consecutive retries when enabled, 1โ€“10 | 3 | ## AI Studio settings **Settings โ†’ Site Settings โ†’ AI Studio** provides controls for the initial state of various sections on the AI Studio page, so you don't have to collapse them manually every time you open it: | Setting | Description | Default | | - | - | - | | Collapse Sidebar by Default | Auto-collapse the left navigation bar when opening the page | Off | | Collapse Run Settings Panel by Default | Auto-collapse the right run settings panel when opening the page | Off | | Collapse Tools Section by Default | Auto-collapse the tools section inside run settings | Off | | Collapse Advanced Settings by Default | Auto-collapse the advanced options inside run settings | Off | | Enable Search Tool by Default | Auto-enable Google real-time search when opening the page | On | | Remove Image Watermark | Remove the watermark from AI Studio generated images (takes effect after a page reload) | Off | | Markdown Bold Fix | Fix intermittent bold text rendering failures | Off | ## Claude session key management Claude accounts have usage rate limits. When one account hits its cap, you normally have to wait for a reset. If you have multiple Claude accounts, Ophel can store Session Keys for all of them and let you switch instantly โ€” keeping the conversation going without logging out and back in. A Session Key (`sk-ant-sid...` format) is the authentication token your browser session uses on claude.ai. Ophel injects the specified key into requests so you can switch accounts without a full logout cycle. Keys are stored locally in your browser and are never sent to Ophel's servers. **Adding a session key** โ€” go to **Settings โ†’ Site Settings โ†’ Claude**: **Auto-import (recommended)** Click **Import current session**. Ophel reads the Session Key for your currently logged-in Claude account directly from your browser's cookies โ€” no manual copying required. > [!NOTE] > > Auto-import requires the cookie access permission for claude.ai. Ophel will prompt you to grant it if needed. **Manual add** Click the Add button and paste a Session Key string in `sk-ant-sid...` format. You can add a label to each key to identify which account it belongs to. **Switching between accounts:** **Settings page** Go to ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ Site Settings โ†’ Claude** and select a key from the current Session Key selector, or use **Set as current** on a key row. **Keyboard shortcut** Press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to switch to the next key in your list. After switching, Ophel refreshes the current Claude page to apply the new key. **Managing the key list:** | Action | Description | | - | - | | ![Set current key icon](/docs/images/icons/check.svg) Set as current | Make a specific key the active account | | ![Test key icon](/docs/images/icons/shield-check.svg) Test single | Send a lightweight request to verify the key is valid and not rate-limited | | ![Test all keys icon](/docs/images/icons/sync.svg) Test all | Validate all keys in sequence, with 500 ms between tests to avoid triggering rate limits | | ![Export keys icon](/docs/images/icons/export.svg) Export | Export all keys as a ![JSON file icon](/docs/images/icons/json-file.svg) JSON file for backup | | ![Import keys icon](/docs/images/icons/import.svg) Import | Restore a key list from a ![JSON file icon](/docs/images/icons/json-file.svg) JSON file | | ![Delete key icon](/docs/images/icons/delete.svg) Delete | Remove a single entry โ€” does not affect the Claude account itself | > [!WARNING] > > Exported JSON files contain the full Session Keys. Anyone with the file can use your account's quota. Be careful when sharing WebDAV backups or local files that contain exported keys. ## Usage monitor For AI services with daily usage limits, Ophel provides a local counter that shows how many conversation turns you have used today and roughly how many tokens were consumed. The usage monitor runs entirely locally โ€” it does not call any external APIs or rely on usage data from the platform. Ophel counts turns and estimates tokens by observing messages on the page. **Settings โ†’ Features โ†’ Alerts โ†’ Local Usage Counter & Estimate**: | Setting | Description | Default | | - | - | - | | Enable local advanced-model counter and estimate | Show the local counter widget near the input field | Off | | Estimated daily conversation limit | Used for the 80% / 100% threshold reminders; local estimate only | 100 | | Enable auto reset | Automatically reset the count each day | Off | When enabled, the widget shows today's send count, input/output character stats, rough token estimates, and progress toward your daily limit. > [!NOTE] > > Token estimates are based on character counting and may differ from the platform's actual billing. Treat them as a rough reference, not an exact measure. # Export, import, and restore your Ophel backup data Source: https://ophel.app/docs/data/backup-sync Export your prompts, settings, and conversation metadata as JSON for safekeeping, import on another device, or reset to defaults. Ophel stores all your data locally in your browser. The backup and restore tools in **Settings โ†’ Data Management โ†’ Local Backup** let you export that data as a JSON file for safekeeping, move it to another device, or wipe everything and start over. ## Export a backup Three export types are available. Choose the one that fits what you need to preserve: | Export type | What's included | | - | - | | ![Full backup icon](/docs/images/icons/backup.svg) Full backup | Everything in local storage: settings, prompts, conversation metadata, folders, tags, and Claude Session Keys if you use Claude multi-account features | | ![Prompt library icon](/docs/images/icons/prompt.svg) Prompts only | Your prompt library | | ![Settings icon](/docs/images/icons/settings.svg) Settings only | All configuration items | > [!TIP] > > Use **Full backup** before making any large configuration changes or before clearing your data. It's the safest snapshot to fall back to. > [!WARNING] > > Full backups can contain valid Claude Session Keys when that feature is in use. Keep backup files private. ## Import a backup Drag and drop a ![JSON file icon](/docs/images/icons/json-file.svg) JSON file onto the import area, or click it to open a file picker. Ophel validates the file format before writing anything. Once the import is confirmed, the page refreshes automatically to apply the new configuration. > [!WARNING] > > Importing **overwrites** your existing data. Export a backup of your current state before importing a file from another device or an older snapshot. ## Clear all data Go to **Settings โ†’ Data Management โ†’ Local Backup** and click ![Clear data icon](/docs/images/icons/delete.svg) **Clear all data**. This deletes every piece of data Ophel has stored locally โ€” prompts, conversation metadata, folders, tags, and all settings โ€” and returns the extension to its initial install state. > [!WARNING] > > This action is irreversible. Export a full backup before clearing if you want to preserve anything. # Ophel browser permissions: what they are and why Source: https://ophel.app/docs/data/permissions Every permission Ophel requests explained โ€” what each one enables, when the browser prompts you, and what gets disabled when you revoke it. Ophel requests only the permissions it needs to operate. Required permissions are declared in the extension manifest and granted when you install Ophel. Optional permissions are never granted silently โ€” your browser asks you the first time a feature that needs one is activated, and you can revoke any of them later from **Settings โ†’ Permissions**. ![Ophel Permissions settings panel](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/panel/permission.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=d628b2c09cc34a089961bfd0f9c1c675) ## Required permissions These permissions are always active. Ophel cannot function without them. | Permission | Purpose | | - | - | | `storage` | Save your settings, prompts, folders, tags, and conversation metadata in browser local storage | | `declarativeNetRequestWithHostAccess` | Apply declarative network request rules on Claude pages (used for header modifications) | ## Optional permissions These permissions are off by default. Ophel requests each one through a browser prompt the first time you use a feature that depends on it. | Permission | What it enables | | - | - | | `notifications` | Desktop notification when AI response generation completes | | `cookies` | Reading and switching Claude Session Keys for multi-account support | | `` | WebDAV sync requests to your own server, and watermark removal | ## Granting a permission You do not need to grant optional permissions manually in advance. When you turn on a feature that requires one โ€” for example, enabling WebDAV sync or the completion notification โ€” your browser displays a standard permission prompt. Click **Allow** to grant it. > [!NOTE] > > If you dismissed a browser permission prompt by accident, go to **Settings โ†’ Permissions** and use the grant controls there to trigger it again. ## Revoking a permission Go to **Settings โ†’ Permissions**. Each optional permission has a **Revoke** button. After you revoke a permission, any features that depend on it are automatically disabled โ€” you do not need to turn them off individually. | Permission revoked | Features automatically disabled | | - | - | | `notifications` | Desktop completion notifications | | `cookies` | Claude Session Key reading and switching | | `` | WebDAV sync, watermark removal | > [!WARNING] > > Revoking `` disables both WebDAV sync and watermark removal at the same time, because both features depend on broad host access. If you only want to disable one of them, turn it off in its own feature settings instead of revoking the permission. ## Site Extension host access Site Extensions use **optional host permissions** for each pack origin, not a permanent blanket host grant at install time. When you install a pack or bind a custom HTTPS origin, the browser asks for access to those origins only. Denying the prompt rolls back that install or binding. See [Install and manage Site Extensions](/docs/enhancements/site-extensions/installation) for the full permission, reauthorization, and custom-origin flow. Granting **Advanced Features Access** (``) also covers the origins of installed Site Extensions, so packs and custom bindings can activate without per-origin prompts. Revoking it returns those origins to per-origin prompts; Site Extensions are not disabled. ## Frequently asked questions > **Why does WebDAV sync need \?** > > WebDAV servers can be hosted at any URL โ€” there is no fixed hostname Ophel can request permission for in advance. The `` permission allows Ophel to make a network request to whatever server address you configure. The request goes only to your own WebDAV server. > **What does the cookies permission actually access?** > > The `cookies` permission lets Ophel read session cookies on Claude's domain so you can store and switch between multiple Claude accounts (Claude Session Keys). Ophel does not read cookies on any other site. > **Can I use Ophel without granting any optional permissions?** > > Yes. All optional permissions are off by default. Core features โ€” conversation organization, prompt library, outline panel, themes, and local backup/restore โ€” work without any optional permission. # Privacy in Ophel Atlas: local-first, no data collection Source: https://ophel.app/docs/data/privacy Ophel stores everything in your browser and collects nothing. No account, no analytics, no conversation data sent to any Ophel server. Ophel stores your data in your browser by default. Every setting, prompt, folder, tag, and piece of conversation metadata you create stays in local storage unless you enable an optional feature such as WebDAV sync. Ophel does not collect or store your data on Ophel servers. ## Where your data lives All Ophel data is written to your browser's local storage by default. Nothing is uploaded to Ophel's infrastructure. The data stored locally includes: * Extension settings and preferences * Your prompt library * Conversation organization data (folders, tags, pinned state) * Reading history positions * Theme preferences * Claude Session Keys (when you use the Claude multi-account feature) No account is required to use Ophel. There is no sign-in, no profile, and no sync tied to an Ophel-owned service. ## What Ophel never does * Ophel does not collect analytics or usage telemetry. * Ophel does not display advertisements. * Ophel does not read, upload, or have any access to the content of your AI conversations. Conversation messages belong to the AI platform you are using. * During normal Claude multi-account use, Ophel sends Claude Session Keys only to Claude's own endpoints when you initiate a request. Full backups and WebDAV backups can contain those keys when the feature is in use. ## Permissions model Ophel requests only the permissions it needs. Optional permissions are never granted automatically โ€” your browser asks you first, and you can revoke them at any time. | Type | Permission | Purpose | | - | - | - | | Required | `storage` | Save your settings and local data in the browser | | Required | `declarativeNetRequestWithHostAccess` | Apply header rules on Claude for certain features | | Optional | `notifications` | Show a desktop notification when AI generation completes | | Optional | `cookies` | Read and switch Claude Session Keys | | Optional | `` | WebDAV sync and watermark removal | Revoking an optional permission automatically disables the features that depend on it. See [Permissions](/docs/data/permissions) for details on how to grant and revoke each one. ## WebDAV sync: your server, your data If you choose to enable WebDAV sync, your data is transmitted to the WebDAV server you configure โ€” not to Ophel. You choose the server, you hold the credentials, and you control who has access. Your password is stored locally in your browser and is never sent to Ophel or any third party. ## Claude Session Keys Claude Session Keys are stored locally in your browser and are used to make requests to Claude's own endpoints on your behalf. If you use full backup or WebDAV sync, backup files can contain those keys. Keep backup files private. ## Exporting and migrating your data You can export your full data set at any time from **Settings โ†’ Data Management โ†’ Local Backup**. This lets you move to a different device, keep an offline backup, or leave Ophel without losing anything you've organized. See [Backup & Restore](/docs/data/backup-sync) for export options. ## Open source Ophel is released under the GPLv3 license. You can read the source code, verify the data practices described here, and build from source yourself. # Keep Ophel in sync across devices with WebDAV Source: https://ophel.app/docs/data/webdav Use a WebDAV server to sync Ophel prompts, folders, and settings across devices. Your data goes to your own server โ€” Ophel's infrastructure is never involved. WebDAV sync lets you push your Ophel data to a server you own and pull it back on any other device where Ophel is installed. Because the data goes to your own server โ€” not to Ophelโ€™s infrastructure โ€” you stay in full control of where your data lives. Ophel has built-in presets for the most common WebDAV providers: | Provider | Notes | | - | - | | **Nutstore (Jianguoyun)** | Generate an app-specific password on the web dashboard | | **Infinicloud** | Fixed URL, works out of the box | | **pCloud** | Fixed URL, works out of the box | | **Nextcloud** | Self-hosted; enter your own server URL | | **Synology NAS** | Enable WebDAV Server in Package Center first | | **Seafile** | Self-hosted; enter your own server URL | | **Custom** | Any other WebDAV-compatible server | ## What gets synced WebDAV sync backs up the Ophel data stored locally: * Folders, tags, and pinned state you've set for your conversations * Your prompt library * Ophel settings * Claude Session Keys, if you use the Claude multi-account feature **Not synced:** The actual conversation messages on AI platforms. Those messages belong to each AI service. Ophel has no access to read or upload them. > [!WARNING] > > Backup files can contain valid Claude Session Keys when that feature is in > use. Keep WebDAV backup files private. ## Settings Configure the sync connection at **Settings โ†’ Data Management โ†’ WebDAV Sync**: | Field | Description | | - | - | | Provider | Presets for common providers (Jianguoyun, InfiniCloud, Nextcloud, and more) or Custom | | Server URL | Full URL of your WebDAV server โ€” must start with `https://` | | Username | Your WebDAV account username | | Password | Your WebDAV account password (stored locally, never sent to Ophel servers or any third party) | | Default Directory | Directory on the server where sync files are stored (default: `ophel`, created automatically) | ## Set up WebDAV sync **1. Open the WebDAV settings panel** Go to **Settings โ†’ Data Management โ†’ WebDAV Sync**. **2. Enter your server details** Fill in the Server URL, Username, Password, and Default Directory. If the directory doesn't exist yet, Ophel creates it on first sync. **3. Grant the required permission** WebDAV sync requires the optional `` permission. Your browser will prompt you to grant it the first time you enable the feature. **4. Test the connection** Click ![Test connection icon](/docs/images/icons/check.svg) **Test connection** to verify your credentials and server reachability before syncing any data. **5. Push your data** Click ![Upload backup icon](/docs/images/icons/cloud-upload.svg) **Upload** to push your current local data to the server. ## Restore on a new device **1. Configure the same WebDAV server** On the new device, enter the same server URL, username, password, and default directory you used on the original device. **2. Pull from server** Click ![Pull from server icon](/docs/images/icons/download.svg) **Download** to fetch the latest backup, or pick an older snapshot from the **WebDAV Backup List** to restore. ## Multi-device usage > [!NOTE] > > Simultaneous writes from multiple devices can cause conflicts on the server. > Download the latest backup before uploading from a second device. ## Required permission WebDAV sync requires the optional `` browser permission. Ophel uses this to make network requests to your WebDAV server's URL. The browser will ask you to grant this permission the first time you enable WebDAV sync. You can revoke it at any time from **Settings โ†’ Permissions** โ€” revoking it will disable WebDAV sync automatically. ## Provider-specific setup notes > **Nutstore (Jianguoyun)** > > Log in to the Jianguoyun web dashboard, go to **Account Info**, and generate > an **app-specific password**. Use that app password in the Password field โ€” > your main login password will not work. The server URL is pre-filled as > `https://dav.jianguoyun.com/dav/`. > **Nextcloud** > > Set the server URL to `https://your-domain/remote.php/dav/files/username/`. > Use your Nextcloud login username and password. > **Synology NAS** > > Install the **WebDAV Server** package from Package Center and enable HTTPS. > The server URL format is `https://your-nas-address/webdav/`. > **Other providers** > > Select **Custom** and enter your server's WebDAV URL. The URL must start > with `https://` โ€” plain HTTP is not supported. # Content enhancements: Mermaid, formulas, and Markdown Source: https://ophel.app/docs/enhancements/content Render Mermaid diagrams and formulas, copy LaTeX or MathML source, format your own messages in Markdown, copy tables in one click, and export conversations. Ophel adds a layer of interactivity to AI conversation pages: diagrams that some platforms leave as raw code get rendered automatically, formulas become copyable with a double-click, your own messages display Markdown formatting, and any conversation can be exported in multiple formats. ## Mermaid diagram rendering Some AI platforms display Mermaid code blocks as raw text instead of rendered diagrams. When Ophel detects an unrendered Mermaid block, it renders the diagram in place automatically. **Settings โ†’ Features โ†’ Content โ†’ Assistant Mermaid Render** (default: on) > [!NOTE] > > This only activates when the platform itself has not rendered the Mermaid > block. It will not interfere with native diagram rendering. ## Formula rendering and source copy When an AI reply contains math, Ophel recognizes LaTeX delimiters and renders the formulas inline. To copy the source from any supported rendered formula, double-click it โ€” Ophel copies the selected source format to your clipboard immediately. **Settings โ†’ Features โ†’ Content โ†’ Double-click to copy formula** (default: on) ### Formula copy format Choose whether double-clicking a formula copies: * **LaTeX source** โ€” best for Markdown notes, TeX editors, Obsidian, Typora, and most AI prompts * **MathML source** โ€” best for accessibility workflows, web documents, and tools that preserve structured math markup **Settings โ†’ Features โ†’ Content โ†’ Formula copy format** (default: LaTeX source) > [!NOTE] > > Some sites expose only visual formula HTML and no stable source. In that case, > Ophel shows a message instead of copying an unreliable result. ### LaTeX delimiters When the copy format is **LaTeX source**, Ophel can add delimiters before placing the text on the clipboard: * Inline formulas use `$ ... $` * Block formulas use `$$ ... $$` Enable **Settings โ†’ Features โ†’ Content โ†’ Add delimiter when copying** if the destination expects complete Markdown-style math snippets. ## User message Markdown rendering Markdown syntax you type in the AI input box โ€” `**bold**`, `` `code` ``, `- list item` โ€” normally appears as plain text in your message bubble after sending. With this feature enabled, Ophel renders Markdown formatting inside your messages so they're easier to read. **Settings โ†’ Features โ†’ Content โ†’ User Query Style Enhancement** (default: on) ## Markdown table copy A **Copy** button appears on tables inside AI replies. Clicking it copies the table as standard Markdown table syntax, ready to paste into any Markdown editor. **Settings โ†’ Features โ†’ Content โ†’ Table Copy Markdown** (default: on) ## Conversation export Export any conversation to a file from ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Export icon](/docs/images/icons/export.svg) **Export**. The quick button exports ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown; the Conversations tab row menu also lets you choose ![JSON file icon](/docs/images/icons/json-file.svg) JSON or ![TXT file icon](/docs/images/icons/txt-file.svg) TXT. > **Markdown (.md)** > > Exports the full conversation with speaker labels and message content > formatted as Markdown. Useful for pasting into notes apps, wikis, or > documentation. > **JSON (.json)** > > Exports structured data including metadata. Useful for programmatic > processing or archiving. > **Plain text (.txt)** > > Exports a clean, unformatted transcript. **Settings โ†’ Features โ†’ Conversations โ†’ Export Settings** controls export behavior: | Setting | Description | | - | - | | Custom User Name | Replaces "Me" in exported files; leave blank to use the default | | Custom AI Name | Replaces the AI's name in exported files; leave blank to use the platform name | | Add Timestamp to Filename | Appends a timestamp to the filename to avoid overwriting existing exports | | Include Thoughts in Export | Include the AI's reasoning content for platforms that expose it (such as Claude, Kimi, and Qwen Studio) | | Markdown Export Method | **Markdown only** exports a single `.md` file; **Zip package** bundles the Markdown with referenced images and files as a `.zip` | > [!TIP] > > For a detailed explanation of the zip package structure, asset handling per > platform, and advanced export capabilities (Deep Research reports, Canvas code, > document artifacts), see the dedicated [Export](/docs/features/export) page. ## Platform-specific fixes > **Markdown fix (Gemini, AI Studio, ChatGPT)** > > These platforms sometimes fail to render bold text correctly โ€” `**text**` appears as literal characters instead of formatted output. Ophel includes a patch for each affected platform. > > * **Settings โ†’ Site Settings โ†’ Gemini โ†’ Markdown Bold Fix** > * **Settings โ†’ Site Settings โ†’ AI Studio โ†’ Markdown Bold Fix** > * **Settings โ†’ Site Settings โ†’ ChatGPT โ†’ Markdown Bold Fix** > **Watermark removal (Gemini, AI Studio)** > > Gemini and AI Studio can attach "Created with Gemini" watermarks when exporting or screenshotting certain content. Enabling this removes those watermarks. > > This feature requires the optional `` permission (used to fetch images and convert them to base64). The browser will prompt for permission the first time you enable it. > > **Settings โ†’ Site Settings โ†’ Gemini โ†’ Remove Image Watermark** # Reading history, scroll lock, and position restore Source: https://ophel.app/docs/enhancements/reading Automatically save and restore your reading position per conversation, lock the page during AI generation, and jump around long threads with one-click anchors. Ophel tracks where you are in each conversation so you never have to scroll back to find your place. Pair that with scroll lock to stay on the part you're reading while the AI is still generating, and a set of quick navigation anchors to jump around long threads instantly. ## Reading history When you leave a conversation, Ophel quietly records your scroll position. The next time you return, it scrolls you back to exactly where you left off. **Settings โ†’ Features โ†’ Reading History**: | Setting | Description | Default | | - | - | - | | Enable Reading History | Automatically remember the reading position for each conversation | On | | Auto-Resume | Jump to the last position when the page loads | On | | Retention Period | How many days of reading progress to keep before automatic cleanup | 3 days | Available retention periods: 1 day / 3 days / 7 days / 30 days / 90 days / Forever. > [!TIP] > > To re-read a conversation from the top on a single visit without disabling auto-restore, append `?ophel_skip_restore=1` to the URL when opening it. Ophel skips the restore for that visit only. ## Scroll lock While the AI is generating, the page automatically scrolls down to follow new output. If you're reading something earlier in the thread, this is disruptive. Scroll lock freezes the page's scroll position for the duration of generation; once the AI finishes, normal scrolling resumes. **How to toggle:** **Keyboard shortcut** Press to toggle scroll lock on or off. **Toolbox menu** Click the ![Toolbox icon](/docs/images/icons/tools.svg) toolbox icon in the floating button group, then select ![Scroll lock icon](/docs/images/icons/scroll-lock.svg) **Scroll Lock**. > [!NOTE] > > Scroll lock is a temporary per-session state and does not persist across page > refreshes. For a lasting effect, enable **Prevent auto-scroll** in **Settings โ†’ > Features โ†’ Outline โ†’ Scroll Settings**. ## Navigation anchors The floating button group provides three scroll shortcuts that also work as a navigation system: | Button | Keyboard shortcut | What it does | | - | - | - | | ![Scroll to top icon](/docs/images/icons/scroll-top.svg) Scroll to top | | Loads full history and jumps to the top | | ![Scroll to bottom icon](/docs/images/icons/scroll-bottom.svg) Scroll to bottom | | Jumps to the latest message | | ![Return to anchor icon](/docs/images/icons/anchor.svg) Return to anchor | | Returns to the last saved position | Every time you use **Scroll to top** or **Scroll to bottom**, Ophel saves your current position as an anchor first. Click **Return to anchor** to jump back. Click it again to toggle between the anchor and wherever you are now โ€” useful for cross-referencing two parts of a long conversation. ## Bookmarks Ophel lets you bookmark specific messages in a conversation for quick access later. Bookmarked items appear in the outline panel so you can jump to them from the sidebar. To remove bookmarks that point to content that no longer exists, open the ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** and select ![Clear invalid bookmarks icon](/docs/images/icons/cleanup.svg) **Clear Invalid Bookmarks**. # Author a Site Extension Source: https://ophel.app/docs/enhancements/site-extensions/authoring Create a declarative Site Pack with the in-product site adapter setup flow or JSON, validate it, and contribute it to the Ophel registry. A Site Pack is a declarative JSON manifest. It describes where Ophel may run, which page elements represent chat roles, and which capabilities are safe to expose. It cannot execute JavaScript or load remote code. You can start from either: 1. the in-product **site adapter setup** flow (**Create an adapter for this site**) 2. the repository example at [`registry/examples/site-pack.example.json`](https://github.com/urzeye/ophel/blob/main/registry/examples/site-pack.example.json) This guide follows the published [Duck.ai](https://github.com/urzeye/ophel/blob/main/registry/sites/duck-ai.json) pack and the current runtime validator. ![Site adapter setup steps](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/wizard-steps.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=4d991751a31f2016ea3d6a17c525866b) ## Path A: Site adapter setup On an unsupported HTTPS page, open the launcher (**Create an adapter for this site**). The wizard walks through: 1. message input 2. send button 3. conversation container 4. user message 5. AI response 6. optional conversation list item 7. optional new-chat button 8. live outline preview and capability summary 9. save / download / open a prefilled GitHub contribution flow Useful wizard behaviors grounded in the current product: * pick elements on the page, or edit selectors manually * optional AI selector draft helper that only copies a sanitized prompt when you choose to * local save requires HTTPS * saving may request host permission; denial leaves the saved pack disabled * after a successful local save, reload the page so adapter modules start from a clean lifecycle The wizard is a drafting tool. Review every selector and capability before publishing. ## Path B: hand-written JSON Copy the example pack to `registry/sites/.json`, or export a local draft from the wizard. Do **not** add a `$schema` property inside the manifest. The repository maps Site Pack JSON files to the editor schema externally, while the runtime rejects unknown keys. ### Identity and compatibility ```json theme={} { "schemaVersion": 1, "id": "duck-ai", "version": 1, "minAppVersion": "1.1.8" } ``` | Field | Rule | | - | - | | `schemaVersion` | Currently `1` | | `id` | Globally unique, `^[a-z0-9-]{2,40}$`, must not collide with a built-in site ID | | `version` | Positive integer. Published registry versions are immutable; the publish build can derive the final number from content | | `minAppVersion` | Earliest Ophel SemVer that understands the fields you verified | ### Name and description ```json theme={} { "name": "Duck.ai", "nameI18n": { "en": "Duck.ai", "zh-CN": "Duck.ai" }, "description": "Adds Ophel outlines, export, generation controls, layout tools, and prompt insertion to Duck.ai.", "descriptionI18n": { "en": "Adds Ophel outlines, export, generation controls, layout tools, and prompt insertion to Duck.ai." } } ``` `name` / `description` are fallbacks. `nameI18n` / `descriptionI18n` override them for matching languages. Registry contributions that change user-facing metadata should provide all eleven project languages used by Ophel. ### Match the target site ```json theme={} { "matches": ["https://duck.ai/*"] } ``` Rules: * at most ten HTTPS extension match patterns * no global matches or top-level host wildcards * no overlaps with built-in sites or existing packs * self-hosted packs may use `matches: []` and activate only after the user binds an exact HTTPS origin ### Declare capabilities honestly ```json theme={} { "capabilities": [ "outline", "outline-user-queries", "export-basic", "generation-detect", "new-chat", "stop-generation", "width", "zen", "prompt-insert" ] } ``` Each capability requires supporting fields. See the [capabilities reference](/docs/enhancements/site-extensions/capabilities). If a feature is not verified, omit the capability. ### Select chat elements ```json theme={} { "selectors": { "textarea": ["textarea[name='user-prompt']"], "submitButton": ["[data-testid='duckai-chat-input'] button[type='submit']"], "responseContainer": "section:has([data-testid='duckai-chat-input'])", "userQuery": "[data-testid='user-message']", "assistantResponse": "[data-activeresponse='true'] > :nth-child(2)", "newChatButton": ["[data-testid='duckai-sidebar'] > div > div:has([role='search']) + div button[type='button']"], "stopButton": ["[data-testid='duckai-chat-input'] div:has(> button[type='submit']) + div > button[type='button']"] } } ``` Selector guidance: * prefer stable `data-testid`, stable IDs, semantic attributes, and short structural relationships * avoid generated hashes, utility-only classes, and translated visible text when a stable attribute exists * treat positional selectors such as `:nth-child()` as a last resort and document the real-browser evidence in the pull request ### Configure common groups **Input** ```json theme={} { "input": { "mode": "textarea", "submitKey": "Enter" } } ``` **Generation** ```json theme={} { "generating": { "existsSelectors": [ "[data-testid='duckai-chat-input'] div:has(> button[type='submit']) + div > button[type='button']" ] } } ``` **Export** ```json theme={} { "export": { "userQuerySelector": "[data-testid='user-message']", "assistantResponseSelector": "[data-activeresponse='true'] > :nth-child(2)", "turnSelector": null, "useShadowDOM": false } } ``` **Zen mode** ```json theme={} { "zenMode": { "hide": ["[data-testid='duckai-sidebar']", "[data-testid='duckai-top-toolbar']"] } } ``` **Width** ```json theme={} { "widthSelectors": [ { "selector": "section:has([data-testid='duckai-chat-input']) div:has(> [data-testid='user-message'])", "property": "max-width", "extraCss": "width: 100% !important; box-sizing: border-box !important;" } ] } ``` Optional `extraCss` is still filtered by the restricted CSS-value validator. Remote resource functions, imports, expressions, and JavaScript URLs are rejected after decoding and normalization. ### Panel avoidance and theme sync `panel-avoidance` requires a verified `panelAvoidance` block. At minimum, provide non-empty `widthSelectors`. Optional fields include `scopeSelector`, `obstacleSelectors`, `insetSelectors`, `gap`, and width thresholds. `themeSync` is optional and is **not** a capability id. Use it only for sites that switch theme through explicit `localStorage` writes and optional `` class toggles. See [Capabilities](/docs/enhancements/site-extensions/capabilities#theme-sync-is-not-a-capability-id). ## Security constraints while authoring * serialized Site Pack JSON must stay within 64 KiB * ordinary arrays are capped at 50 items * regexes are length-limited and checked with `safe-regex2` * same-origin path templates must start with a single `/` * never include tokens, cookies, account data, internal URLs, or user content * never use a Site Pack to override a built-in site * never add scripts, expressions, remote resources, or destructive automation fields ## Validate and contribute From the ophel repository: ```bash theme={} pnpm registry:validate pnpm registry:build ``` `registry:build` generates a local unsigned build for testing. The signed distribution used by the registry publish workflow is produced by `pnpm registry:build:signed`. Then verify the declared capabilities on the real site, including: * cold reload * idle and generating states * outline / export / prompt insertion if declared * panel open and closed, for width or panel-avoidance packs Submit the JSON with the [SitePack pull request template](https://github.com/urzeye/ophel/blob/main/.github/PULL_REQUEST_TEMPLATE/site-pack.md) and follow the [review checklist](https://github.com/urzeye/ophel/blob/main/docs/developer/site-adapter/site-pack-review-checklist.md). Editor JSON Schema help: * [`registry/schema/site-pack.schema.json`](https://github.com/urzeye/ophel/blob/main/registry/schema/site-pack.schema.json) Runtime authority: * [`src/adapters/declarative/validate.ts`](https://github.com/urzeye/ophel/blob/main/src/adapters/declarative/validate.ts) ## Related pages * [Capabilities reference](/docs/enhancements/site-extensions/capabilities) * [Install and manage](/docs/enhancements/site-extensions/installation) * [Site Extension FAQ](/docs/enhancements/site-extensions/faq) # Site Extension capabilities reference Source: https://ophel.app/docs/enhancements/site-extensions/capabilities Every Site Pack capability Ophel recognizes, the configuration it requires, and the product surface it unlocks. Capabilities are a **UI and runtime contract**, not marketing metadata. Ophel only exposes controls that match the active pack's capability set, and the runtime validator rejects packs that declare a capability without the required fields. The authoritative capability list lives in `src/adapters/feature-capabilities.ts`. The authoritative field requirements live in `src/adapters/declarative/validate.ts`. ## Capability catalog | Capability | Required configuration | What it unlocks | | - | - | - | | `outline` | `selectors.responseContainer` | Conversation outline from assistant headings / structure | | `outline-user-queries` | `outline` plus `selectors.userQuery` | User questions as top-level outline entries | | `conversation-list` | `conversation` | Conversation list capture / navigation integration | | `export-basic` | `export` | Basic conversation export | | `model-lock` | `modelSwitcher` | Model lock controls for the pack site | | `generation-detect` | `generating` **or** `networkMonitor` | Generating-state detection used by completion UI | | `new-chat` | non-empty `selectors.newChatButton` | New conversation action | | `stop-generation` | non-empty `selectors.stopButton` | Stop generation action | | `width` | non-empty `widthSelectors` | Page width controls | | `panel-avoidance` | `panelAvoidance` | Shrink host content into the safe area beside the Ophel panel | | `zen` | `zenMode` | Zen mode hide rules / styles | | `clean` | `cleanMode` | Clean mode hide rules / styles | | `prompt-insert` | non-empty `selectors.textarea` plus `input` | Prompt insertion into the page input | | `reading-history` | non-empty `selectors.chatContent` | Reading-history capture for the conversation surface | There is **no** capability id named `theme-sync`. Host theme sync is a separate config field, `themeSync`, and may imply `supportsHostThemeSync`. ## Capability notes ### Outline family * `outline` needs a conversation container so Ophel can scope scanning. * `outline-user-queries` cannot be declared alone; the validator requires `outline` as well. * Prefer stable message roots over translated visible text. ### Prompt insertion `prompt-insert` needs both: * one or more textarea / contenteditable selectors * an `input` block with `mode` (`textarea` or `contenteditable`) and `submitKey` (`Enter` or `Ctrl+Enter`) Ophel uses the native value setter for textareas and a validated beforeinput / execCommand path for contenteditable editors. It does not silently fall back to assigning `textContent`. ### Generation detection Use whichever signal is reliable on the target site: * `generating.existsSelectors` โ€” visible DOM markers while generating * `networkMonitor` โ€” request URL / body rules when DOM state is insufficient A pack may provide either or both. Declaring `generation-detect` without either is rejected. ### Layout capabilities | Capability | Typical config | Caution | | - | - | - | | `width` | `widthSelectors[]` with selector + CSS property | Optional `extraCss` still passes the restricted CSS validator | | `zen` | `zenMode.hide` and optional root class / styles | Do not hide the conversation or required input | | `clean` | `cleanMode.hide` / styles | Keep rules narrow | | `panel-avoidance` | `panelAvoidance.widthSelectors` plus optional obstacles / insets | Must be verified with the panel open at several viewport widths | ### Theme sync is not a capability id Sites that switch light / dark mode by writing `localStorage` and optionally toggling a class on `` can declare `themeSync`: ```json theme={} { "themeSync": { "storageKey": "theme", "values": { "dark": "dark", "light": "light", "system": "system" } } } ``` Rules grounded in the current validator: * `storageKey`, `values.dark`, and `values.light` are required when `themeSync` is present * `values.system` is only for sites that store a distinct follow-system value * `darkClass` / `lightClass` are optional; both may be omitted when the site listens to `storage` events itself * nested object storage uses `valuePath`; flat JSON-encoded strings use `valueFormat: "json"` * `valuePath` and `valueFormat` cannot be combined * body class, `data-theme`, or click-simulation theme mechanisms are not supported by this field * declaring `themeSync` while also setting `supportsHostThemeSync: false` is rejected ## Example: Duck.ai capability set The published `duck-ai` pack currently declares: ```json theme={} [ "outline", "outline-user-queries", "export-basic", "generation-detect", "new-chat", "stop-generation", "width", "zen", "prompt-insert" ] ``` It does **not** declare conversation-list, model-lock, clean, panel-avoidance, or reading-history. The product UI therefore does not present those pack-backed controls for Duck.ai. ## Related configuration groups These groups are not capabilities themselves, but they often accompany capability declarations: | Group | Role | | - | - | | `selectors` | Shared page element roots | | `input` | Input mode and submit key | | `conversation` | Sidebar conversation items and navigation | | `session` | Path-based session id / new-chat / share routes | | `modelSwitcher` | Model menu selectors and timing | | `export` | Message and turn selectors for export | | `mermaidSupport` / `quickQuote` | Optional behavior switches | | `theme` | Pack accent colors for UI presentation | Full field, length, regex, CSS, and size limits are defined by: * editor assist: [`registry/schema/site-pack.schema.json`](https://github.com/urzeye/ophel/blob/main/registry/schema/site-pack.schema.json) * runtime authority: [`src/adapters/declarative/validate.ts`](https://github.com/urzeye/ophel/blob/main/src/adapters/declarative/validate.ts) When the two disagree, the runtime validator wins. ## Related pages * [Author a Site Extension](/docs/enhancements/site-extensions/authoring) * [Install and manage](/docs/enhancements/site-extensions/installation) * [Site Extension FAQ](/docs/enhancements/site-extensions/faq) # Site Extension FAQ Source: https://ophel.app/docs/enhancements/site-extensions/faq Answers about Site Pack permissions, registry updates, self-hosted bindings, privacy, and built-in adapter differences. ## How is a Site Pack different from a built-in adapter? Built-in adapters may contain site-specific TypeScript for complex behaviors. Site Packs are declarative JSON. Built-in adapters take priority and cannot be overridden by a Site Pack. Selector-only fixes for configured built-in adapters use the signed patch channel instead of a Site Pack. ## Are community packs official Ophel code? Registry packs are community-contributed manifests reviewed and published through the Ophel registry workflow. They use the same validator and signed distribution chain, but their supported capability set may be narrower than a built-in adapter. The management page shows the pack source and declared capabilities. ## Why does the extension request access to another domain? Ophel needs optional host permission before it can register content scripts on a Site Pack origin. The request is limited to the pack's referenced HTTPS origins. Denying it rolls back the installation or binding operation. ## Can one pack support self-hosted instances? Yes. A pack can use an empty `matches` list so it never activates on its own. Bind each HTTPS origin to the pack from **Settings โ†’ Site Packs โ†’ Custom sites**. Ophel stores each instance under a key derived from pack ID and origin, so settings, themes, reading history, and conversations do not mix between two deployments of the same pack. ## Do registry packs update automatically? Registry-origin packs participate in the remote registry update flow. The client checks the signed index, version compatibility, immutable package hash, and runtime schema before applying an update. A failed or invalid download does not replace the last-known-good state. Local imports do not update automatically. Import a higher-version local JSON file when you want to replace one. The default check interval is 24 hours. ## What happens when I disable or uninstall a pack? Disabling keeps the manifest but stops it from activating. Uninstalling removes the manifest and its registration references. User settings and conversation data are retained. An origin registration is removed only when no enabled pack or custom binding still references it. ## Can a Site Pack run arbitrary JavaScript? No. Site Packs intentionally reject scripts, expressions, executable callbacks, remote resources, and unrestricted CSS. Complex integrations that require imperative code must be implemented and reviewed as built-in adapters. There is no remote-executable plugin mechanism in the current product. ## What page data is sent to the registry? Installing or updating a registry pack performs static CDN / GitHub GET requests for the signed index and package JSON. Those requests do not include conversation content, prompts, cookies, or page DOM. The optional AI selector-draft helper in the wizard also performs no automatic upload: it creates a bounded structural prompt only when you copy it, and you choose whether and where to share it. ## Is a local JSON import safe? Local imports still pass the Site Pack validator, so unknown fields and unsafe declarative values are rejected. They are not authenticated by the signed community registry, however. Review the target domains and capabilities and import only from a source you trust. ## A selector stopped working. What should I do? 1. Confirm the pack is enabled and the origin still matches. 2. Check for a registry update if the pack came from the online library. 3. For self-hosted packs, confirm the custom origin binding is still correct. 4. If the latest pack still fails, open a GitHub issue with the site URL, Ophel version, pack version, and failed selector names. 5. Remove account details and private conversation content from the report. ## Does Ophel auto-detect self-hosted domains? No. The current design uses **explicit origin binding**. Packs with empty `matches` stay inactive until you add an exact HTTPS origin under **Custom sites**. ## Related pages * [Site Extensions overview](/docs/enhancements/site-extensions) * [Install and manage](/docs/enhancements/site-extensions/installation) * [Capabilities reference](/docs/enhancements/site-extensions/capabilities) * [Author a Site Extension](/docs/enhancements/site-extensions/authoring) # Site Extensions: add support for more AI chat sites Source: https://ophel.app/docs/enhancements/site-extensions/index Site Extensions (Site Packs) are declarative JSON manifests that teach Ophel Atlas how to recognize additional AI chat sites without running arbitrary code. Site Extensions extend Ophel Atlas beyond the built-in AI platforms. In the product and registry this feature is also called **Site Packs**. A pack is a reviewed JSON manifest that declares match rules, stable page selectors, and the capabilities those selectors unlock. They are **not plugins with executable code**. They cannot ship JavaScript, expressions, remote scripts, or unrestricted CSS. Ophel loads them through the same runtime validator, optional-permission boundary, and feature-capability system used by the community registry. ![Site Extensions management page](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/overview.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=5a2d6f723a3997fcf9204f3ed966b8cd) ## Choose a path | Goal | Start here | | - | - | | Install a community or self-hosted pack | [Install and manage](/docs/enhancements/site-extensions/installation) | | Understand what each capability unlocks | [Capabilities reference](/docs/enhancements/site-extensions/capabilities) | | Create or contribute a pack | [Author a Site Extension](/docs/enhancements/site-extensions/authoring) | | Permissions, updates, and limitations | [Site Extension FAQ](/docs/enhancements/site-extensions/faq) | ## What a Site Extension can provide A pack only unlocks the controls that match its declared capabilities. Depending on the pack, that may include: * conversation outlines and user-query headings * prompt insertion and submit behavior * basic conversation export * generation and stop-button detection * new-chat actions * width, Zen mode, clean mode, or panel avoidance * reading history, model locking, or conversation-list integration when the required configuration is present The management page and site-settings UI hide unsupported controls automatically. A pack should therefore declare only behavior that has been verified on the target site. ## Built-in adapters vs Site Extensions | | Built-in adapters | Site Extensions (Site Packs) | | - | - | - | | Format | TypeScript adapters shipped with Ophel | Declarative JSON only | | Priority | Always win on their domains | Cannot override a built-in site | | Scope | Complex or site-private behavior | Selector- and config-driven integrations | | Updates | App releases, plus signed selector patches for configured builtins | Registry updates or local re-import | | Trust | Reviewed as product code | Registry signature + local schema validation, or local import from a trusted source | Selector-only hotfixes for configured built-in adapters use the signed **patch** channel in the same registry. They are not Site Extensions and cannot introduce a new site. ## Trust boundary Registry packages are downloaded from immutable version paths, checked against a signed registry index and SHA-256 package digests, then validated again locally before activation. Local JSON imports still pass the runtime validator, but they **skip** the registry signature chain and do **not** auto-update. Import only from a source you trust, and review domains and capabilities first. > [!WARNING] > > Site Extensions can change page styles and Ophel behavior on matched origins. Treat unknown local JSON the same way you would treat an unreviewed configuration file. ## Where to manage packs Open **Settings โ†’ Site Packs**. The same management page is available from the extension Options page and the in-page settings dialog. Tabs in the current UI: | Tab | Purpose | | - | - | | **Installed** | Enable, disable, reauthorize, uninstall, and open pack guides | | **Custom sites** | Bind an exact HTTPS origin to an installed pack | | **Browse & updates** | Online pack library, refresh registry, install/update, local JSON import | A **Guide** button in the settings toolbar opens this documentation on ophel.app. ## Example packs in the community registry The registry source currently ships these community manifests under `registry/sites/`: | Pack ID | Typical target | Match style | | - | - | - | | `duck-ai` | [duck.ai](https://duck.ai) | Static `https://duck.ai/*` | | `lobechat` | [app.lobehub.com](https://app.lobehub.com) | Static `https://app.lobehub.com/*` | | `librechat` | Self-hosted LibreChat | Empty `matches`; bind a custom origin | | `nextchat` | Self-hosted NextChat | Empty `matches`; bind a custom origin | | `open-webui` | Self-hosted Open WebUI | Empty `matches`; bind a custom origin | Exact capability sets differ by pack. Install a pack and inspect its declared capabilities, or open the JSON in the [ophel registry](https://github.com/urzeye/ophel/tree/main/registry/sites) for the source of truth. ## Security model in one page * No arbitrary JavaScript, remote code, or executable callbacks * HTTPS origins only; HTTP custom bindings are rejected * Optional host permission and dynamic content-script registration in the extension * Registry index is Ed25519-signed; package files are SHA-256 pinned * Failed or invalid updates keep the last-known-good installed state * Built-in site IDs and domains cannot be claimed by a pack ## Next steps 1. [Install a pack](/docs/enhancements/site-extensions/installation) from the online library or a local JSON file. 2. For self-hosted apps, bind the exact HTTPS origin under **Custom sites**. 3. If you are writing a pack, read the [capabilities reference](/docs/enhancements/site-extensions/capabilities) and [authoring guide](/docs/enhancements/site-extensions/authoring). # Install and manage Site Extensions Source: https://ophel.app/docs/enhancements/site-extensions/installation Install Site Extensions from the online library or local JSON, grant host access, bind self-hosted origins, and keep packs updated. Open **Settings โ†’ Site Packs**. The same management page is available from the extension Options page and the in-page settings dialog. ![Installed Site Extensions tab](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/installed-tab.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=edd5ece690b46762f765054750d05cd7) ## Install from the online pack library 1. Open the **Browse & updates** tab. 2. Under **Online pack library**, select **Refresh** / refresh the registry if the list is empty or stale. 3. Review the pack name, version, target domain or self-hosted badge, description, and compatibility status. 4. Select **Install**. 5. In the browser extension, approve the requested target-domain permission. Ophel requests only the HTTPS origins referenced by the pack or binding. 6. Reload the target site after installation completes. Registry packs update through the signed remote registry. Before replacing an installed version, Ophel verifies: * the signed index * the immutable package digest * the pack's `minAppVersion` * the complete runtime schema Default registry sources: ```text theme={} https://cdn.jsdelivr.net/gh/urzeye/ophel@registry-dist/index.json https://raw.githubusercontent.com/urzeye/ophel/registry-dist/index.json ``` The client checks the registry about every 24 hours. A failed or invalid download does not replace the last-known-good installed state. ## Import a local JSON pack Use **Local JSON import** when testing a pack you created or received outside the community library. 1. Select the import control and choose a `.json` file. 2. Review the confirmation dialog: pack name, ID, version, match-pattern count, and risk notice. 3. Confirm the import. 4. Approve target-domain permission in the extension when prompted, then reload the site. Local imports are validated by the same runtime rules as registry packs, but they are: * **not** authenticated by the community registry signature * **not** auto-updated Install a newer local file when you want to replace one. ![Local JSON import confirmation](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/local-import.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=aa63751d1484e8da70b00723655533c5) ## Extension permissions The extension uses optional host permissions and dynamic content-script registration for Site Pack origins. * Installation or binding is rolled back if required permission is denied, so a half-installed pack is not left active. * After restoring a backup on another browser, pack data is restored, but domain permission must be granted again. The Site Packs page lists packs under **Reauthorize restored site packs**. * Disabling or uninstalling the last pack that references an origin removes its dynamic registration. If several packs or custom bindings share one origin, Ophel keeps the registration until the final reference is removed. ![Host permission prompt for a Site Extension](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/permission-prompt.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=56c8dd154a12ea11dc0501cc289ea420) ## Bind a custom origin Custom origins support self-hosted or same-application deployments whose domain is not listed in a pack's static `matches`. Typical self-hosted packs ship with `matches: []` and show a **Binding needed** / **Self-hosted** badge until you add an origin. 1. Open the **Custom sites** tab. 2. Enter an exact HTTPS origin such as `https://chat.example.com`. Paths and wildcards are rejected. 3. Choose an installed pack. 4. Save the binding. 5. Approve host permission in the extension. 6. Reload the bound origin. The selected pack always activates on that origin. Ophel stores each instance under a key derived from pack ID and origin, so settings, themes, reading history, and conversations do not mix between two deployments of the same pack. ![Custom HTTPS origin binding](https://mintcdn.com/urzeye/5Vb8XPYHreemioOy/images/enhancements/site-extensions/custom-origin-binding.png?fit=max\&auto=format\&n=5Vb8XPYHreemioOy\&q=85\&s=f23a843818e56cc07cfeb05655254d2b) ## Update, disable, or uninstall | Action | Result | | - | - | | **Check for updates** | Compares an installed registry pack with the latest compatible registry version | | **Disable** | Keeps the pack installed but removes it from adapter activation and origin references | | **Uninstall** | Removes the manifest and its registration references. Site settings and conversation data are retained | | Registry disabled / incompatible | The management page shows the reason instead of silently activating the pack | When a registry pack requires a newer Ophel version, the UI shows **Requires Ophel or newer**. ## Status badges you may see | Status | Meaning | | - | - | | **Available** | Pack can activate with current permission and match coverage | | **Disabled** | Installed but turned off | | **Incompatible** | App version or registry state cannot activate the pack | | **Self-hosted** / **Binding needed** | Pack has no static matches and needs a custom origin | | **Removed from library** | Registry entry is no longer available | | **Online library** / **Local import** | Pack source | ## Troubleshooting install problems If a pack installs but the site is not recognized: 1. Confirm the pack is enabled. 2. Reload the target tab after granting permission. 3. Check that the current origin matches the pack or custom binding exactly, including scheme and host. 4. For self-hosted packs, confirm a custom origin binding exists. 5. If the pack is from the online library, check for a newer version. 6. If the latest pack still fails, open a GitHub issue with the site URL, pack version, Ophel version, and failed selector names โ€” without private conversation content. ## Related pages * [Site Extensions overview](/docs/enhancements/site-extensions) * [Capabilities reference](/docs/enhancements/site-extensions/capabilities) * [Author a Site Extension](/docs/enhancements/site-extensions/authoring) * [Site Extension FAQ](/docs/enhancements/site-extensions/faq) * [Permissions](/docs/data/permissions) # Tab management and AI completion notifications Source: https://ophel.app/docs/enhancements/tab-notifications Auto-rename browser tabs with conversation titles, receive desktop alerts when the AI finishes, and hide tab titles with privacy mode. When you're running multiple AI conversations across different tabs, keeping track of which tab is which โ€” and knowing when the AI has finished โ€” becomes a real workflow problem. Ophel manages your browser tab titles automatically and can alert you the moment a response is ready, even when you've switched to something else entirely. ## Auto tab renaming Ophel syncs your browser tab title to the current AI conversation, making it easy to identify open sessions from the tab bar. **Settings โ†’ Features โ†’ Tab**: | Setting | Description | Default | | - | - | - | | Auto Rename Tab | Sync conversation title to the browser tab | On | | Detection Interval | How often to poll for title changes (1 / 3 / 5 / 10 / 30 / 60 s) | 3 s | | Title Format | Tab title template using `{status}`, `{title}`, and `{model}` variables | `{status}{title}->{model}` | | Show Status | Display a generating or completed icon in the tab title (`โณ` / `โœ…`) | On | | Only show checkmark when unread | Show `โœ…` only while the completed reply has not been viewed; hide it after you return to the tab | Off | The default format produces titles like `โณ My conversation->GPT-4o` while generating and `โœ… My conversation->GPT-4o` when complete. The title format editor highlights `{status}`, `{title}`, and `{model}` as token chips and provides buttons to insert them, so you can adjust the template without mistyping a placeholder. > [!TIP] > > Enable ![New tab icon](/docs/images/icons/new-tab.svg) **Open New Chat in New Tab** in **Settings โ†’ Features โ†’ Tab** to show a panel-header button that opens a fresh chat in a new browser tab. Existing conversations can be opened in a new tab from the ![Conversation menu icon](/docs/images/icons/more-horizontal.svg) conversation row menu. ## Generation complete notifications When the AI finishes a reply in another tab, Ophel can alert you with a desktop notification, a sound, or both. **Settings โ†’ Features โ†’ Alerts**: | Setting | Description | Default | | - | - | - | | Desktop Notification | Send a desktop notification when generation completes | Off | | Notification Sound | Play an audio cue with the notification | On | | Sound Preset | Choose from built-in sound effects, with preview | softChime | | Sound Volume | Notification volume (10%โ€“100%) | 50% | | Play Count | How many times to repeat a short sound (1 / 2 / 3 / 5) | 3 | | Repeat Interval | Time between each repeat (1 / 2 / 3 / 5 / 10 s) | 2 s | | Notify When Focused | Also notify when the active tab is already in view | Off | | Auto Focus the Window | Bring the browser window to the foreground when generation completes | Off | > [!NOTE] > > The first time you enable **Desktop Notification**, the browser will ask > for the **notifications** permission. Choose Allow. If you previously denied > it, go to **Settings โ†’ Permissions** to grant it. ## Privacy mode If you don't want the tab bar to reveal what you're discussing, privacy mode replaces the browser tab title with custom text of your choosing. **Settings โ†’ Features โ†’ Tab**: | Setting | Description | Default | | - | - | - | | Privacy Mode | Replace the tab title with custom text | Off | | Decoy Title | The text to display instead of the real title | Google | > [!NOTE] > > Privacy mode only affects the browser tab title. It has no effect on > conversation content or anything inside the Ophel panel. ## Model lock Ophel can automatically switch to your preferred model each time you open a particular AI site, so you never have to manually re-select your model after a page load. This is covered in detail on the [site settings](/docs/customization/site-settings) page. # Frequently asked questions about Ophel Atlas extension Source: https://ophel.app/docs/faq Answers to common questions about installing Ophel Atlas, using the panel, outline, conversations, prompts, Claude session keys, permissions, and privacy. This page answers the most common questions about Ophel Atlas. If you don't find what you're looking for here, check the [Troubleshooting](/docs/troubleshooting) page or open an issue on [GitHub Issues](https://github.com/urzeye/ophel/issues). ## Installation & Setup > **Which AI platforms does Ophel support?** > > Ophel works on 15 AI platforms: > > | Platform | URL | > | - | - | > | **Gemini** | [gemini.google.com](https://gemini.google.com) | > | **Gemini Enterprise** | [business.gemini.google](https://business.gemini.google) | > | **AI Studio** | [aistudio.google.com](https://aistudio.google.com) | > | **ChatGPT** | [chatgpt.com](https://chatgpt.com) | > | **Claude** | [claude.ai](https://claude.ai) | > | **Grok** | [grok.com](https://grok.com) | > | **DeepSeek** | [chat.deepseek.com](https://chat.deepseek.com) | > | **Doubao** | [www.doubao.com](https://www.doubao.com) | > | **Kimi** | [www.kimi.com](https://www.kimi.com) | > | **Qwen Studio** | [chat.qwen.ai](https://chat.qwen.ai) | > | **Qianwen** | [www.qianwen.com](https://www.qianwen.com) | > | **Yuanbao** | [yuanbao.tencent.com](https://yuanbao.tencent.com) | > | **Z.ai** | [chat.z.ai](https://chat.z.ai) | > | **ChatGLM** | [chatglm.cn](https://chatglm.cn) | > | **ima** | [ima.qq.com](https://ima.qq.com) | > **How do I enable the extension after installing it?** > > After installing, open any supported AI platform in your browser. The Ophel panel should appear automatically in the sidebar. If it doesn't, check that the extension is enabled in your browser toolbar (click the puzzle-piece icon and confirm Ophel is toggled on), then hard-reload the page with . > > Some URLs require you to explicitly grant Ophel permission to run. If you see a "Click to enable" prompt in the extension popup, click it and allow access to the current site. > **What's the difference between the browser extension and the userscript?** > > The **browser extension** (available for Chrome, Edge, and Firefox) is the recommended option. It has the full feature set, better performance, and higher compatibility because it integrates directly with the browser. > > The **userscript** runs inside a userscript manager like Tampermonkey and does not require a browser extension install. It is a good fallback if you cannot install extensions, but some features may be limited compared to the extension version. ## Site Extensions > **What are Site Extensions?** > > Site Packs are declarative JSON manifests that add support for AI chat sites beyond the built-in platforms. They do not run arbitrary JavaScript. Manage them from **Settings โ†’ Site Packs**. > > Start with the [Site Extensions overview](/docs/enhancements/site-extensions), then see [install and manage](/docs/enhancements/site-extensions/installation) for registry installs, local import, and custom origin binding. > **Can Site Extensions support self-hosted Open WebUI or LibreChat?** > > Yes. Several community packs ship with empty match lists and require an explicit HTTPS origin binding under **Settings โ†’ Site Packs โ†’ Custom sites**. See the [installation guide](/docs/enhancements/site-extensions/installation#bind-a-custom-origin). ## Panel & Navigation > **Why isn't the panel showing on the page?** > > Work through these steps in order: > > 1. Confirm the extension is installed and enabled โ€” check the browser toolbar for the Ophel icon. > 2. Hard-reload the page: . > 3. Check that the site you're on is in the [supported platforms list](#which-ai-platforms-does-ophel-support). > 4. If you previously closed the panel, press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to reopen it, or click the ![Panel quick button icon](/docs/images/icons/sparkle.svg) panel button in the floating quick buttons group. > **How do I open the panel if the floating buttons have disappeared?** > > Press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) . This keyboard shortcut toggles the panel > regardless of whether the floating buttons are visible on screen. > **How do I use ghost mode?** > > Ghost mode makes the panel temporarily transparent and click-through so you > can interact with the page behind it. Hold alone > for about 0.2 seconds. The panel fades out and lets > clicks pass through. Release the key to return to normal. > **What is edge snap, and how do I use it?** > > Edge snap lets the panel hide against the screen edge and slide out when you need it. Drag the panel toward a screen edge until it snaps into place. To reveal it, hover over that edge โ€” the panel slides out automatically. To undock it, drag it away from the edge. > > If you prefer to keep the panel floating freely, switch **Panel mode** to **Floating** in **Settings โ†’ General โ†’ Panel**. ## Outline > **Why is the outline empty even though the conversation has content?** > > Some AI platforms update the DOM asynchronously, so the outline may not populate immediately when the page first loads. Press to refresh the outline manually. If the outline stays empty after a refresh, check that **Auto-update outline during conversation** is enabled in **Settings โ†’ Features โ†’ Outline**. > **Why isn't the outline tracking my scroll position?** > > The scroll-tracking feature is controlled by a setting. Go to **Settings โ†’ > Features โ†’ Outline** and make sure **Outline Follow Mode** > is set to **Follow Current Position** rather than **Manual Control**. > **How do I refresh the outline manually?** > > Press ![Refresh outline icon](/docs/images/icons/refresh.svg) at any time to force the outline to re-scan the conversation and rebuild its entries. ## Conversations > **Why aren't my conversations showing in the Conversations tab?** > > The Conversations tab reads from the AI platform's own sidebar. If the platform's sidebar hasn't fully loaded, Ophel cannot see the conversations. Try scrolling the native sidebar on the AI platform to trigger it to load more items, then check the Conversations tab again. > **What does WebDAV sync actually back up?** > > WebDAV sync backs up Ophel data stored locally: conversation titles, folder assignments, tags, pins, saved prompts, settings, and Claude Session Keys if you use the Claude multi-account feature. It does **not** upload the actual conversation messages โ€” those belong to the AI platform and stay there. ## Prompts & Queue > **How does the Prompt Queue work?** > > The Prompt Queue lets you line up multiple prompts and send them automatically one by one without waiting manually after each AI response. To use it: > > 1. Enable the queue in ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ Features โ†’ Prompts โ†’ Prompt Queue**. > 2. Open the queue overlay with ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) . > 3. Add prompts one by one, or use the batch-import option to paste and split a large block of text. > 4. After you add pending prompts, Ophel automatically sends the next one once it detects the AI has finished responding (no active generation for two consecutive checks, roughly 2 seconds). > > You can edit pending items, force-send a single item, remove individual items, or clear the queue at any time. > **The queue isn't sending the next prompt โ€” why?** > > Ophel waits until the AI page appears idle (no generation spinner detected) for two consecutive polling intervals, which takes about 2 seconds. If the AI platform uses an unusual loading indicator that Ophel cannot detect, the queue may stall indefinitely. As a workaround, open the queue overlay with ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) and use **Force Send** on a pending item. ## Claude > **What are Session Keys?** > > A Claude session key is an authentication token from your active browser session on claude.ai. By adding multiple session keys (from different Claude accounts), you can rotate between accounts when one hits its usage limit. Ophel intercepts outgoing requests to claude.ai and swaps in the active session key automatically. > **Is it safe to store session keys in Ophel?** > > Session keys are stored locally in your browser on your own machine. Ophel does not upload them to Ophel servers. If you use full backup or WebDAV backup, be careful about who has access to your backup files โ€” they can contain valid authentication tokens. ## Permissions > **Why does Ophel ask for the all\_urls permission?** > > The `` permission is required for two optional features: **WebDAV sync** (to connect to your own WebDAV server at any URL) and **watermark removal** (to fetch and convert images). This permission is entirely optional โ€” if you don't use either feature, you can deny or revoke it. Go to **Settings โ†’ Permissions** and click **Revoke** next to it. > **Can I revoke permissions after granting them?** > > Yes. Go to **Settings โ†’ Permissions** and click **Revoke** next to any permission you want to remove. Revoking a permission disables the feature that depends on it, but everything else in Ophel continues to work normally. ## Privacy > **Does Ophel send my conversation data anywhere?** > > No. Ophel runs entirely in your browser. Your conversation data, prompts, > and settings stay on your device by default. If you configure WebDAV sync, > data is sent only to the WebDAV server you specify โ€” which you control. > Ophel itself does not collect or transmit any user data. ## General > **How do I reset everything to defaults?** > > Go to **Settings โ†’ Data Management โ†’ Local Backup** and click **Clear all data**. This > removes all Ophel data stored in your browser, including saved prompts, > conversation metadata, folder and tag definitions, and all settings. The AI > platform's own conversation history is not affected. # Conversation Management: folders, tags, and search Source: https://ophel.app/docs/features/conversations Organize your AI chat history with color-coded folders, free-form tags, pinning, bulk actions, and flexible export โ€” all synced from the platform sidebar. The Conversations tab gives you a searchable, organized view of every chat on the current AI platform. ![Conversations tab โ€” folder and tag list](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/conversation-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=cb447fe91815933df0f4d066de8ae68f) Ophel reads the same conversation list the AI platform displays and layers folders, tags, pinning, and export on top of it โ€” no data leaves the browser unless you explicitly export or sync. ## How conversations sync Ophel observes the AI platform's sidebar and reflects its conversation list in real time. When you create, rename, or delete a conversation on the platform, the Conversations tab updates automatically. The metadata Ophel adds โ€” folder assignments, tags, pins โ€” is stored locally and overlaid on top of the platform's data. The folder selector in the upper-left toolbar controls the default folder for new sync results. After you select a folder there, newly discovered conversations are added to that folder by default, whether they are found during manual sync or detected later from the platform sidebar. Existing conversations keep their current folder unless you move them. ## Browsing and filtering The Conversations tab supports several ways to narrow the list: * **Search** โ€” type in the search box to filter by title in real time * **Filter by folder** โ€” click a folder in the sidebar to show only conversations in that folder * **Filter by tag** โ€” click a tag to show only conversations with that tag * **Pinned conversations** โ€” pinned items always appear at the top, regardless of any active filter ## Folders Folders group related conversations with a color-coded label. There are 8 color options. Enable **rainbow colors** in settings to give each folder's conversations a distinct tinted background throughout the list. A conversation belongs to one folder at a time. Moving it to another folder updates the local Ophel metadata; it does not modify the original conversation content on the AI platform. You can move conversations in three ways: * **Quick button group** โ€” click the ![Toolbox icon](/docs/images/icons/tools.svg) toolbox icon in the floating quick button group, then click the ![Move conversation icon](/docs/images/icons/folder-move.svg) **Move Conversation** icon in the popover. * **Conversation row menu** โ€” in the Conversations tab, click the ![Three-dot menu icon](/docs/images/icons/more-horizontal.svg) three-dot menu on the conversation row, then choose ![Move conversation icon](/docs/images/icons/folder-move.svg) **Move Conversation**. * **Batch mode** โ€” click the ![Batch mode icon](/docs/images/icons/batch.svg) **Batch Mode** button in the Conversations tab toolbar, select one or more conversations, then click the ![Move conversation icon](/docs/images/icons/folder-move.svg) **Move** button in the batch action bar. After you choose **Move to folder**, select an existing folder. The folder assignment updates immediately in Ophel metadata and does not modify the original conversation content on the AI platform. ### Drag conversations to folders Drag any conversation row onto a folder row to move it there. The target folder highlights while you hover over it, and the list updates as soon as you drop. ### Reorder folders Drag any non-default folder row to reorder your folder list. The default inbox folder stays fixed, and buttons or inputs inside a folder row remain interactive instead of starting a drag. ## Tags Tags are free-form labels โ€” one conversation can have multiple tags. Use them to mark status (`reviewed`, `todo`), topic (`work`, `study`), or any other dimension that folders do not cover. * Add or change tags from ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Set tag icon](/docs/images/icons/tag.svg) **Set Tags**, or from the conversation list context menu * Filter by tag by clicking the tag in the sidebar ## Pinning conversations Right-click any conversation, or click the ![Three-dot menu icon](/docs/images/icons/more-horizontal.svg) three-dot menu on its row, then choose ![Pin icon](/docs/images/icons/pin.svg) **Pin** to move it to the top of the list. Pinned rows show a filled pin in the same menu; choose ![Unpin icon](/docs/images/icons/pin.svg) **Unpin** to return the row to normal sorting. Pins persist across sessions. ## Batch operations Click the ![Batch mode icon](/docs/images/icons/batch.svg) **Batch Mode** button in the Conversations tab toolbar, then select conversations with the row checkboxes. The batch action bar supports: | Action | Description | | - | - | | ![Copy Markdown icon](/docs/images/icons/copy.svg) Copy Markdown | Copy the selected conversation as Markdown | | ![Export icon](/docs/images/icons/export.svg) Export | Export the selected conversation as a file | | ![Move conversation icon](/docs/images/icons/folder-move.svg) Move | Assign all selected conversations to a folder at once | | ![Delete icon](/docs/images/icons/delete.svg) Delete | Remove all selected conversations | | ![Exit batch mode icon](/docs/images/icons/clear.svg) Exit | Leave batch mode and clear the current selection | ## Exporting a conversation You can export a conversation in three ways: * **Quick button group** โ€” click the ![Toolbox icon](/docs/images/icons/tools.svg) toolbox icon in the floating quick button group, then click ![Export icon](/docs/images/icons/export.svg) **Export** to export ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown. * **Keyboard shortcut** โ€” press to export the current conversation as ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown. * **Conversation row menu** โ€” in the Conversations tab, click the ![Three-dot menu icon](/docs/images/icons/more-horizontal.svg) three-dot menu on a conversation row, choose ![Export icon](/docs/images/icons/export.svg) **Export**, then select ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown, ![JSON file icon](/docs/images/icons/json-file.svg) JSON, or ![TXT file icon](/docs/images/icons/txt-file.svg) TXT. Markdown exports can optionally be delivered as a zip package that includes images, attachments, and other assets referenced in the conversation. You can also click ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Copy Markdown icon](/docs/images/icons/copy.svg) **Copy Markdown** to copy the entire conversation to your clipboard without saving a file. For full details on export formats, packaging modes, asset handling, and per-platform capabilities, see the dedicated [Export & Packaging](/docs/features/export) page. ## Keyboard shortcuts Cross-platform key mapping Shortcuts show both Windows/Linux and Mac keys: `Ctrl` maps to `Command`, and `Alt` maps to `Option`. Prompt submit is the only exception: `Ctrl+Enter` remains `Ctrl+Enter` on Mac. | Shortcut | Action | | - | - | | | New conversation | | | Refresh conversation list | | | Locate current conversation in list | | | Previous conversation | | | Next conversation | | | Export current conversation | | | Copy latest AI reply | All shortcuts are customizable in **Settings โ†’ Keyboard Shortcuts**. ## WebDAV sync Configure a WebDAV server in **Settings โ†’ Data Management โ†’ WebDAV Sync** to sync Ophel's **conversation metadata** to your own private server. > [!NOTE] > > WebDAV sync transfers only the metadata Ophel stores locally โ€” folder > assignments, tags, and pin state. It does not include the actual AI > conversation content, which belongs to the AI platform. Once configured, click **Upload** / **Download** to sync manually. See [WebDAV Sync](/docs/data/webdav) for full setup instructions. ## Settings Go to **Settings โ†’ Features โ†’ Conversations** to configure folder and sync behavior. | Setting | Description | | - | - | | Folder Rainbow Colors | Use distinct colored backgrounds for folder-assigned conversations | | Sync Unpin Status | Remove pins when syncing from a remote source | | Sync Delete Cloud | Delete remote records when you delete conversations locally | # Conversation Export: Markdown, JSON, zip packages, and asset preservation Source: https://ophel.app/docs/features/export Export AI conversations in Markdown, JSON, plain text, or zip packages โ€” with per-platform support for images, attachments, code artifacts, Deep Research reports, and thinking chains. Ophel can export any AI conversation to a file, preserving not just the text but also images, uploaded files, generated assets, code artifacts, and reasoning chains โ€” depending on what the platform exposes. You control the output format, what gets included, and how files are packaged. ## How to export | Method | Description | | - | - | | Floating quick buttons | Click the ![Toolbox icon](/docs/images/icons/tools.svg) toolbox icon, then click ![Export icon](/docs/images/icons/export.svg) **Export** to save ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown | | Keyboard shortcut | exports the current conversation as ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown | | Conversations tab | Click the ![Three-dot menu icon](/docs/images/icons/more-horizontal.svg) three-dot menu on a conversation row, choose ![Export icon](/docs/images/icons/export.svg) **Export**, then select ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown, ![JSON file icon](/docs/images/icons/json-file.svg) JSON, or ![TXT file icon](/docs/images/icons/txt-file.svg) TXT | | Segmented export | Click the three-dot menu on a conversation row, choose **Export segments...** to select and export specific parts of a conversation | After triggering an export, a full-page progress overlay blocks accidental interaction while Ophel loads history, extracts content, packages assets, saves the file, and restores the page. ## Export formats | Format | What it preserves | Best for | | - | - | - | | ![Markdown file icon](/docs/images/icons/markdown.svg) Markdown (`.md`) | Speaker labels, headings, lists, code blocks, and image references | Notes, wikis, documentation, and AI-to-AI handoff | | ![Zip package icon](/docs/images/icons/zip-file.svg) Markdown zip package (`.zip`) | The Markdown file plus referenced images, attachments, and generated artifacts in `assets/` | Conversations with files, images, Canvas code, or document artifacts | | ![JSON file icon](/docs/images/icons/json-file.svg) JSON (`.json`) | Structured messages with roles, timestamps, model metadata, and content | Programmatic processing, indexing, and archival workflows | | ![TXT file icon](/docs/images/icons/txt-file.svg) Plain text (`.txt`) | A clean transcript without Markdown formatting | Searchable text archives and plain text editors | You can also click ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Copy Markdown icon](/docs/images/icons/copy.svg) **Copy Markdown** to copy the entire conversation to your clipboard without saving a file. ## Segmented export Segmented export lets you select and export specific parts of a conversation instead of exporting the entire thread. This is useful for long conversations where you only need certain sections, or when you want to organize different topics into separate files. ### How to use segmented export **1. Open the segmented export dialog** From the Conversations tab, click the ![Three-dot menu icon](/docs/images/icons/more-horizontal.svg) three-dot menu on any conversation row and choose **Export segments...** **2. Select segments** Ophel automatically detects conversation segments based on user questions. You can: * Search for specific segments using the search box * Select segments individually by clicking checkboxes * Use range selection (e.g., "1-3, 8") to select multiple segments at once * Click **Select visible** to select all segments matching your search * Click **Invert visible** to flip the current selection **3. Choose export mode** Pick one of three output modes: * **ZIP (one Markdown per segment)** โ€” Each selected segment becomes a separate `.md` file inside a zip archive * **Merged Markdown** โ€” All selected segments are combined into a single `.md` file * **Copy Markdown** โ€” Copies the merged Markdown directly to your clipboard **4. Export** Click **Export selected** to download or copy your selection. ### Segment detection Ophel treats each user question as the start of a new segment. A segment includes: * The user's question * The AI's complete response * Any nested back-and-forth exchanges before the next top-level user question Each segment shows a preview with metadata: number of user messages, number of AI messages, and approximate character count. ## Packaging mode Go to **Settings โ†’ Features โ†’ Conversations โ†’ Export Settings โ†’ Markdown Export Method** to choose how Markdown exports handle assets: | Mode | Behavior | | - | - | | **Markdown only** | Exports a single `.md` file. Images and attachments appear as text references or external links. | | **Zip package** | Bundles the Markdown file together with all assets in a `.zip` archive. | When zip mode is active, Ophel downloads the archive directly instead of a standalone Markdown file. ### Zip package structure ``` conversation-title.zip โ”œโ”€โ”€ conversation-title.md โ””โ”€โ”€ assets/ โ”œโ”€โ”€ images/ โ† Generated and embedded images โ”œโ”€โ”€ files/ โ† User-uploaded attachments (PDFs, documents, etc.) โ””โ”€โ”€ documents/ โ† Exported artifacts (Claude documents, Gemini Canvas code) ``` All references inside the Markdown file use stable relative paths, so the zip extracts cleanly into any folder. ## Platform export capabilities Each AI platform exposes different types of content. The table below shows what Ophel can preserve per platform. | Platform | User attachments | Generated images | Thinking chains | Artifacts & reports | | - | :-: | :-: | :-: | - | | **ChatGPT** | โœ… | โœ… | โ€” | Deep Research reports | | **Gemini** | โœ… | โœ… | โœ… | Canvas code, Deep Research reports | | **Gemini Enterprise** | โœ… | โœ… | โœ… | Canvas code, Deep Research reports | | **AI Studio** | โœ… | โ€” | โ€” | โ€” | | **Claude** | โœ… | โ€” | โœ… | Document artifacts | | **Grok** | โœ… | โœ… | โ€” | โ€” | | **DeepSeek** | โœ… | โ€” | โ€” | โ€” | | **Doubao** | โœ… | โœ… | โ€” | โ€” | | **Kimi** | โœ… | โ€” | โœ… | Share page exports | | **Qwen Studio** | โœ… | โœ… | โœ… | โ€” | | **Qianwen** | โœ… | โœ… | โ€” | โ€” | | **Yuanbao** | โœ… | โœ… | โœ… | โ€” | | **Z.ai** | โœ… | โ€” | โœ… | โ€” | | **ChatGLM** | โœ… | โœ… | โœ… | โ€” | | **ima** | โœ… | โœ… | โœ… | โ€” | > [!NOTE] > > This table reflects what Ophel can extract from each platform's current page > structure. If a platform redesigns its DOM, some capabilities may need adapter > updates before they work again. ## Platform-specific export details ### ChatGPT * **Generated images** โ€” AI-generated image-only replies are included in both Markdown and zip exports. * **Deep Research reports** โ€” When a Deep Research report is available, the export includes the report title and a link. In zip mode, linked report files are preserved under `assets/files/`. * **User attachments** โ€” Uploaded images and linked files from user prompts are packaged in zip mode. ### Gemini & Gemini Enterprise * **Canvas code artifacts** โ€” Exports open Canvas artifacts, switches to the code tab, and includes the generated code in the Markdown output. When a Canvas panel is open, **Copy Markdown** and **Download Markdown** buttons appear directly in the Canvas toolbar for quick code export. * **Deep Research exports** โ€” Covers owned app conversations, share pages, and generated report share pages. Closed report panels are opened during export and restored afterward. * **Deep Research report actions** โ€” When a Deep Research report panel is open, **Copy Markdown** and **Download Markdown** buttons appear in the report toolbar, exporting only the current report without changing the regular conversation export. ### Claude * **Document artifacts** โ€” Markdown document artifacts are exported as linked files under `assets/documents/` in zip packages. * **Thinking chains** โ€” Expanded Claude thinking blocks are included when "Include Thoughts in Export" is enabled. * **Attachments** โ€” Uploaded images and linked files from user prompts are packaged in zip mode, preserving the original reply order of text and artifact links. ### Kimi * **Share page export** โ€” Kimi share pages are supported for export, outline extraction, and scroll navigation. * **Thought chains** โ€” Visible thinking content is included when "Include Thoughts in Export" is enabled. * **User images** โ€” Uploaded images are preserved in Markdown and zip exports. ### Deep Research report export (Gemini) Gemini Deep Research reports are handled separately from regular conversation exports: * The Outline tab shows a **Chat / Document** source switch when a report is open, letting you browse the report outline independently from the conversation outline. * The report panel toolbar includes **Copy Markdown** and **Download Markdown** buttons for exporting only the report content. * During a full conversation export, Ophel opens the report panel if it is closed, extracts the content, and restores the panel state afterward. ## Export settings Configure export behavior in **Settings โ†’ Features โ†’ Conversations โ†’ Export Settings**: | Setting | Description | Default | | - | - | - | | Default Export Format | Format used by toolbox and shortcut exports | Markdown | | Markdown Export Method | Markdown only or zip package | Markdown only | | Add Timestamp to Filename | Adds a timestamp to the exported filename | Off | | Include Thoughts in Export | Exports reasoning steps for platforms that expose them | On | | Show Turn Numbers in Export | Numbers each conversation turn in the output | Off | | Show Export Options Dialog | Shows format and content options before exporting | On | | Markdown Divider | Separator inserted between conversation turns | `---` | | Custom User Name | Replaces "User" in the exported output | (empty) | | Custom AI Name | Replaces the AI name in the exported output | (empty) | ## Copy as Markdown Click ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Copy Markdown icon](/docs/images/icons/copy.svg) **Copy Markdown** to copy the entire conversation to your clipboard in Markdown format. This is faster than exporting a file when you just need to paste the content into a note, email, or another AI chat. ## Export from share pages Ophel supports exporting from share pages on most platforms. The browser tab title and export filename use the page heading when the conversation title is not exposed on a share page. Platform-specific share page support: * **Gemini** โ€” owned app conversations, conversation share pages, and report share pages * **Kimi** โ€” share page conversations with images and file labels * **Doubao** โ€” share links under `/thread/` * **Z.ai** โ€” conversation and share pages * **ChatGLM** โ€” share pages with thinking content * **Qwen Studio** โ€” regular and share page conversations with thinking details # Global Search: find anything across Ophel in seconds Source: https://ophel.app/docs/features/global-search Search outline nodes, conversations, prompts, and settings in one overlay โ€” with syntax filters, fuzzy matching, and instant jump-to-result navigation. Global Search brings the content available in the current Ophel context into a single search field. Instead of switching between tabs to find a heading, conversation on the current AI platform, or saved prompt, you open one overlay and search from one place. Results are grouped by type, and selecting one jumps you directly to that item. ![Global Search overlay โ€” search box with categorized results](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/enhancements/global-search-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=d6a4b30b155fa2d225f034120be67834) ## How to open Global Search | Method | Description | | - | - | | ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) | Default keyboard shortcut | | ![Search icon](/docs/images/icons/search.svg) Floating button | Click the search icon in the floating quick-buttons group | | Double Shift | Press Shift twice in quick succession โ€” optional; enable in **Settings โ†’ Global Search**. Works even when the page is not focused | > [!NOTE] > > Double Shift must be enabled in settings before it works. Unlike other > shortcuts, it does not require the page to be focused, making it useful when > you are interacting with another part of the browser. ## Search scope Global Search covers five result types: | Type | What is included | | - | - | | ![Outline icon](/docs/images/icons/outline.svg) Outline nodes | All headings and your questions in the current conversation | | ![Conversation icon](/docs/images/icons/conversation.svg) Conversations | Saved conversations for the current AI platform or account โ€” searchable by title, tag, or folder | | ![Prompt icon](/docs/images/icons/prompt.svg) Prompts | Titles and content from your prompt library | | ![Settings icon](/docs/images/icons/settings.svg) Settings | Feature names and keywords from the settings page | | ![Feature tips icon](/docs/images/icons/features.svg) Feature Tips | Ophel feature discovery tips โ€” type `tip:` to browse them | Results are grouped by type. Use the arrow keys to navigate up and down, press **Enter** to jump to the selected result, and press **Esc** to close the overlay. ## Syntax filters Add a `key:value` prefix to narrow results. Multiple filters can be combined with each other and with plain keywords. | Filter | Applies to | Values | Example | | - | - | - | - | | `type:` | All | `outline` ยท `conversations` ยท `prompts` ยท `settings` | `type:conversations` | | `folder:` | Conversations | Any folder name (partial match) | `folder:work` | | `tag:` | Conversations, Prompts | Any tag name (partial match) | `tag:research` | | `is:` | Conversations | `pinned` ยท `unpinned` | `is:pinned` | | `level:` | Outline nodes | `0` โ€“ `6` (heading depth) | `level:2` | | `date:` | Conversations, Prompts | `Nd` โ€” up to 999 days (e.g. `7d`, `30d`) | `date:30d` | > [!NOTE] > > Type `tip:` in the search box to switch into Feature Tips mode. This is not a > syntax filter โ€” it bypasses normal search and lists Ophel feature discovery > tips instead. You can combine filters with each other and with plain keywords. For example: ```text theme={} folder:work tag:research model ``` This finds conversations in the "work" folder that also have the "research" tag and whose title contains "model". ## Fuzzy search When fuzzy search is enabled, Ophel allows partial matches โ€” searching `rans` finds `translate`. When it is off, only exact substring matches are returned. Toggle fuzzy search in **Settings โ†’ Global Search**. > [!TIP] > > Disable fuzzy search when you want precise results โ€” for example, when > searching for a specific variable name or a prompt title you know exactly. ## Selecting a prompt result When you press Enter on a **prompt** result, Ophel adapts to the context: * **Smart insert** (default) โ€” if an AI input box is available on the current page, the prompt is inserted directly into it * **Locate only** โ€” Ophel switches to the Prompts tab and highlights the entry, without inserting Change this behavior in **Settings โ†’ Global Search โ†’ Search Everywhere prompt Enter behavior**. ## Search tips > **Find a conversation by folder** > > Type `folder:` followed by part of the folder name. You do not need to type the full name โ€” partial matches work when fuzzy search is on. > > ```text theme={} > folder:client > ``` > **Find all conversations with a specific tag** > > Type `tag:` followed by the tag name. > > ```text theme={} > tag:todo > ``` > **Filter by pin state** > > Use `is:pinned` to see only pinned conversations, or `is:unpinned` to exclude them. > > ```text theme={} > is:pinned project > ``` > **Filter by recency** > > Use `date:Nd` to limit results to conversations or prompts updated within the last N days. For example, `date:7d` returns items from the past week. > > ```text theme={} > date:30d refactor > ``` > **Filter by heading level** > > Use `level:n` (0โ€“6) to find outline nodes at a specific heading depth. Level 1 is an `

`, level 2 is `

`, and so on. Level 0 matches your own questions in the conversation. > > ```text theme={} > level:2 overview > ``` > **Jump to a settings page** > > Type a feature or setting name directly. For example, typing `theme` surfaces the Appearance settings entry; typing `shortcut` brings up the Shortcuts page. > **Find an outline heading in the current conversation** > > Open Global Search while reading a conversation and type part of a heading. Selecting the result scrolls the conversation to that heading and highlights the matching outline entry. ## Settings Go to **Settings โ†’ Global Search** to configure: | Setting | Description | | - | - | | Double Shift to open Global Search | Enable double-pressing Shift to open search | | Enable fuzzy search | Allow partial matches when on; exact substring matches only when off | | Search Everywhere prompt Enter behavior | What happens when you press Enter on a prompt result: Smart (Recommended) or Locate Only | # Smart Outline: live table of contents for AI chats Source: https://ophel.app/docs/features/outline Ophel builds a live, clickable table of contents from your questions and AI headings โ€” with bookmarks, filters, and keyboard shortcuts for long conversations. The Smart Outline reads your conversation after every AI reply and builds a navigable tree in the side panel. Each of your messages becomes a top-level entry, and any Markdown headings inside the AI's response become nested entries beneath it. The longer the conversation, the more value the outline adds. ![Smart Outline โ€” live conversation table of contents](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/outline-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=abe7cdad0df665392c5cc949b9a43da3) ## How the outline is built Every time the AI finishes a reply, Ophel scans the page and produces a tree from two sources: * **Your questions** โ€” each user message becomes a first-level entry * **AI response headings** โ€” Markdown headings (`#`, `##`, `###`, etc.) inside AI replies appear as nested children under the question that triggered them ```text theme={} You: Explain React core concepts โ”œโ”€โ”€ # React Introduction โ”‚ โ”œโ”€โ”€ ## What is React โ”‚ โ””โ”€โ”€ ## Why use React โ”œโ”€โ”€ # Core Concepts โ”‚ โ”œโ”€โ”€ ## Components โ”‚ โ”œโ”€โ”€ ## Props and State โ”‚ โ””โ”€โ”€ ## Lifecycle โ””โ”€โ”€ # Summary ``` Click any entry in the outline to jump directly to that part of the conversation. ## Scroll following and locate mode As you scroll the conversation, the outline highlights the entry that matches your current reading position in real time โ€” a position indicator that keeps you oriented inside long threads. If you scroll the outline panel itself and lose track of where you are, click the ![Locate current position icon](/docs/images/icons/locate.svg) **Locate current position** button or press to snap the outline panel back to highlight your current position. ## Filter and toolbar controls The outline toolbar gives you quick controls for filtering, expansion, copying, locating, and scrolling. | Button | What it shows | | - | - | | ![User questions icon](/docs/images/icons/user-query.svg) **Questions toggle** | Shows or hides your messages as outline entries โ€” useful for reviewing the conversation flow | | ![Bookmarks icon](/docs/images/icons/star.svg) **Bookmarks only** | Shows only entries you have starred | | ![Expand all icon](/docs/images/icons/expand-all.svg) / ![Collapse all icon](/docs/images/icons/collapse-all.svg) **Expand / collapse all** | Expands or collapses the visible outline tree | | ![Copy outline icon](/docs/images/icons/copy-outline.svg) **Copy outline** | Copies a Markdown outline for the current source | | ![Locate current position icon](/docs/images/icons/locate.svg) **Locate current position** | Scrolls the outline panel back to the item matching your current reading position | | ![Scroll to outline top icon](/docs/images/icons/scroll-top.svg) / ![Scroll to outline bottom icon](/docs/images/icons/scroll-bottom.svg) **Scroll top / bottom** | Jumps within the outline list without moving the conversation page | You can also switch filters with keyboard shortcuts: | Shortcut | Action | | - | - | | | Toggle user questions on/off | | | Show only user questions (collapse to level 0) | | | Toggle bookmarks filter | ## Bookmarks Hover over any outline entry to reveal the ![Star bookmark icon](/docs/images/icons/star.svg) star icon. Click it to bookmark that heading. Bookmarks persist across page reloads. > [!NOTE] > > If a bookmarked heading disappears from the conversation โ€” for example, when > the AI regenerates a response โ€” it becomes a **ghost bookmark**. Open the > ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** and > select ![Clear invalid bookmarks icon](/docs/images/icons/cleanup.svg) > **Clear Invalid Bookmarks** to remove stale ghost bookmarks. ## Expand by level You can expand the tree to a specific heading depth without manually clicking every node. **1. Right-click any outline node** A context menu appears with expand-to-level options. **2. Choose a depth, or use a keyboard shortcut** Press through to expand to heading levels 1โ€“6 directly. Press to toggle all nodes expanded or collapsed at once. ## Word count on hover Hover over any outline entry to see a small tooltip showing the approximate character count of that section. This gives you a quick sense of how long an AI response or section is before you navigate to it. ## Copy node text Outline entries show a ![Copy icon](/docs/images/icons/copy.svg) copy icon on hover. Click it to copy that node's text to your clipboard โ€” handy for re-asking a question in a new conversation or saving a heading to notes. ## Copy full outline Click the ![Copy outline icon](/docs/images/icons/copy-outline.svg) **Copy outline** button in the Outline toolbar to copy a structured Markdown outline for the current source. For conversations, the copy follows the current user-question toggle and heading level. For document outlines, it follows the visible outline tree. For virtualized long conversations, Ophel loads the full history first, then restores the page position when it finishes. ## Document outline sources On platforms that expose a separate document panel โ€” such as Claude's right-side document panel or Gemini's Deep Research report โ€” the outline header shows a ![Document outline icon](/docs/images/icons/outline-document.svg) **Chat / Document** source switch. When you select **Document**, the outline tree reflects the document's heading structure instead of the conversation's, letting you navigate the report independently from the chat thread. ## Shortcuts Cross-platform key mapping Shortcuts show both Windows/Linux and Mac keys: `Ctrl` maps to `Command`, and `Alt` maps to `Option`. Prompt submit is the only exception: `Ctrl+Enter` remains `Ctrl+Enter` on Mac. | Shortcut | Action | | - | - | | | Refresh outline | | | Expand / collapse all | | | Toggle user questions on/off | | | Show only user questions (collapse to level 0) | | | Toggle bookmarks filter | | | Locate current position in outline | | | Search within outline | | | Jump to previous heading | | | Jump to next heading | | - | Expand outline to heading level 1โ€“6 | All shortcuts are customizable in **Settings โ†’ Keyboard Shortcuts**. ## Settings Go to **Settings โ†’ Features โ†’ Outline** to configure the outline's behavior. | Setting | Description | Default | | - | - | - | | Auto-update outline during conversation | Rebuild the outline after each AI reply; when off, refresh manually with | On | | Update interval (seconds) | How often Ophel checks for changes, 1โ€“60 | 2 | | Outline Follow Mode | Follow Current Position / Follow Latest Message / Manual Control | Follow Current Position | | Show Word Count | Show the node's approximate word count on hover | Off | | Inline Bookmark Icons | When to show the bookmark star inside the conversation text: Always Visible / Hover Only / Hidden | Always Visible | | Panel Bookmark Icons | When to show the bookmark star in the outline panel entries | Always Visible | | Prevent auto-scroll | Stop the page from auto-scrolling to the bottom while the AI is generating | Off | # Prompt Library: build and reuse your prompt templates Source: https://ophel.app/docs/features/prompts Save prompts with variable placeholders, organize them by category, insert with one click or queue multiple prompts for automatic sequential sending. The Prompt Library saves you from retyping the same instructions every session. You build a personal collection of prompt templates, organize them into categories, and insert any prompt into the AI input box with a single click. Variables let you write reusable templates where certain values are filled in at send time. ![Prompt Library โ€” prompt list and categories](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/prompt-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=6c6fe5fef8140153b8c2824c4e3666b1) ## Using a prompt **Single click** Inserts the prompt text into the AI input box but does not submit. You can review or edit the content before sending. **Double-click** Inserts and submits immediately. If the AI is already generating and **Prompt Queue** is enabled, Ophel adds the prompt to the queue instead of interrupting the current reply. You can turn double-click sending off in **Settings โ†’ Features โ†’ Prompts** if you always want to review before sending. If the prompt contains variables, a dialog appears first asking you to fill in each value before the text is inserted. ## Creating prompts Click the ![Add prompt icon](/docs/images/icons/prompt.svg) **+ Add Prompt** button at the bottom of the Prompts tab and fill in the following fields: | Field | Description | | - | - | | Title | A short label shown in the list | | Content | The full prompt text; variables can be embedded anywhere | | Category | Optional group label to keep related prompts together (e.g., "Writing", "Coding") | | Pin | Optional; ![Pin icon](/docs/images/icons/pin.svg) keeps this prompt at the top of the list | The prompt appears in the list immediately after saving. Hover over a prompt row to use ![Pin icon](/docs/images/icons/pin.svg) pin, ![Preview icon](/docs/images/icons/eye.svg) preview, ![Copy icon](/docs/images/icons/copy.svg) copy, ![More menu icon](/docs/images/icons/more-horizontal.svg) more, ![Edit icon](/docs/images/icons/edit.svg) edit, or ![Delete icon](/docs/images/icons/delete.svg) delete. ## Variables Variables let you write a reusable template where certain values are filled in when you use the prompt. The syntax is **double curly braces**: `{{variable_name}}`. When you click a prompt containing variables, a dialog pops up with an input for each one. Fill in the values and press Enter or click **Confirm** to insert the filled text. There are three variable sub-types: > **Basic variable** > > A plain variable name inside double curly braces. The dialog shows an empty text input. > > ```text theme={} > Summarize the following text in {{language}}: > > {{content}} > ``` > **Variable with a default value** > > Add a colon (`:`) after the variable name, followed by the default. The dialog pre-fills the input with that value โ€” press Enter to accept it unchanged. > > ```text theme={} > Translate to {{target_language:English}}: > > {{text}} > ``` > **Variable with dropdown options** > > Add a colon after the variable name, then list options separated by pipe characters (`|`). The dialog shows a dropdown menu instead of a text field. > > ```text theme={} > Rewrite this in a {{tone:formal|casual|humorous}} tone. > ``` > > You can list as many options as you need: > > ```text theme={} > Code review for {{language:TypeScript|Python|Go|Rust|Java}} > ``` Variables of any sub-type can be mixed in the same prompt. The variable name is the text before the colon, or the entire content between `{{` and `}}` if there is no colon. ## Categories Assign prompts to categories to keep your library organized. A category sidebar appears on the Prompts tab โ€” click a category name to filter the list to that group. Categories are created automatically when you type a new name while editing a prompt. ## Pins Click the ![Pin icon](/docs/images/icons/pin.svg) pin icon on any prompt to float it to the top of the list. Pinned prompts always appear before unpinned ones, regardless of the active category filter. ## Sorting and search Use the ![Search icon](/docs/images/icons/search.svg) search box at the top of the Prompts tab to filter by title or content in real time. Pinned prompts always stay at the top of sorted results. Drag any prompt row to reorder your library. Buttons, inputs, menus, and other interactive controls inside a row remain clickable and do not start a drag. ## Import and export Click the ![Import and export menu icon](/docs/images/icons/import.svg) import/export button in the Prompts tab toolbar, then choose ![Export icon](/docs/images/icons/export.svg) **Export** to save your entire prompt library to a JSON file. This is useful for backup or transferring to another device. Choose ![Import icon](/docs/images/icons/import.svg) **Import** from the same menu to read a JSON file back and pick one of three merge options: | Option | Behavior | | - | - | | Add new | Imports only prompts whose title does not already exist โ€” skips duplicates | | Overwrite | Imports all prompts; replaces existing prompts that share the same title | | Replace all | Deletes your current library and replaces it entirely with the imported file | ## ![Prompt Queue icon](/docs/images/icons/prompt-queue.svg) Prompt Queue The Prompt Queue lets you line up multiple prompts and send them automatically one after another. Ophel waits for the AI to finish each response before sending the next โ€” you do not have to watch and click each time. This is useful for multi-step workflows, batch tasks, or structured interview sequences. ### Enabling the Queue Go to ![Settings icon](/docs/images/icons/settings.svg) **Settings โ†’ Features โ†’ Prompts โ†’ Prompt Queue** and toggle it on. A ![Prompt Queue icon](/docs/images/icons/prompt-queue.svg) queue widget appears near the AI input box. Show or hide it at any time with the **Toggle Prompt Queue** shortcut (default: ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) ). ### Adding prompts to the Queue Type directly in the queue input field and press **Enter** to add a prompt. The queue displays a numbered list of pending items. You can also add saved prompts from the Prompt Library: | Source | Behavior | | - | - | | ![More menu icon](/docs/images/icons/more-horizontal.svg) Prompt More menu โ†’ ![Add to queue icon](/docs/images/icons/add-to-queue.svg) **Add to queue** | Adds the selected prompt as one queue item | | ![More menu icon](/docs/images/icons/more-horizontal.svg) Prompt More menu โ†’ ![Split lines to queue icon](/docs/images/icons/split-lines-to-queue.svg) **Split lines and add to queue** | Splits the prompt content by line and adds each non-empty line as a separate item | | Double-click a prompt while the AI is generating | Queues the prompt automatically when Prompt Queue is enabled | Variable prompts open the variable dialog first when you add them from the prompt row menu. After you confirm the variables, the resolved prompt is added to the queue. For adding many prompts at once, click the ![Batch add icon](/docs/images/icons/import.svg) **Batch Add** button in the queue panel. The dialog has two sources: **Prompt Library** Select saved prompts directly from your library. Choose **Each prompt as one item** or **Split by line**. Prompts that still require variables are disabled in this batch picker; open them from the Prompts tab first so you can fill the variables. Paste a block of text and choose a split mode: | Split mode | Behavior | | - | - | | Split by line | Each line becomes one prompt; empty lines are ignored | | Split by delimiter | Enter a custom separator string (e.g., `---`) and the text splits at each occurrence | A preview shows exactly how the text will be divided before you confirm. ### Running the Queue **1. Add one or more prompts** Add prompts from the queue input, the ![More menu icon](/docs/images/icons/more-horizontal.svg) prompt row menu, or the ![Batch add icon](/docs/images/icons/import.svg) Batch Add dialog. **2. Ophel sends prompts automatically** If the AI is idle, Ophel starts with the next queued prompt immediately. If the AI is generating, pending prompts wait in the queue until the page is idle. **3. Manage the queue while it runs** You can edit a pending item, force-send a single item, remove individual items, or clear the queue with ![Clear queue icon](/docs/images/icons/cleanup.svg) **Clear Queue**. ## Prompt Chains Prompt chains let you select text from any part of the conversation and trigger a sequence of prompts that reference that selection. When you select text on the page, a lightweight popover appears with built-in actions and any custom chains you've created. ### What are chains? A **chain** is a sequence of prompts that run one after another. Each step in the chain can reference the selected text using special variables: * `{{selection}}` โ€” The raw selected text * `{{quote}}` โ€” The selected text formatted as a Markdown blockquote Chains are useful for multi-step workflows like: * Select a passage, summarize it, then ask a follow-up question * Select code, explain it, then suggest improvements * Select text, translate it, then rewrite in a different tone ### Creating a chain **1. Open the Chains view** In the Prompts tab, click ![Chains icon](/docs/images/icons/chain.svg) **Chains** at the top to switch from the Prompts list to the Chains view. **2. Click Add Chain** Click the ![Add chain icon](/docs/images/icons/prompt.svg) **+ Add Chain** button and fill in: * **Name** โ€” A short label for this chain * **Description** โ€” What the chain does (optional) * **Icon** โ€” Pick from 40+ preset SVG icons, or leave blank * **Show in selection popover** โ€” Toggle whether this chain appears when you select text **3. Add prompt steps** Click **Add step** to add prompts to the chain. Each step can either: * Reference an existing prompt from your library (recommended) * Use inline text directly (for one-off chains) Steps run in order from top to bottom. Drag steps to reorder them. **4. Preview variables** The editor shows which variables your chain uses. Built-in variables like `{{selection}}` and `{{quote}}` are filled automatically. Any other variables prompt you for input when you run the chain. **5. Save** Click **Save** to add the chain to your library. ### Using a chain **From selection popover** Select text anywhere in the conversation. A popover appears with **Copy**, **Quote**, and your enabled chain icons. Click a chain icon to trigger it. If the chain has variables, a dialog prompts you to fill them in first. **From the Chains list** Click a chain card in the Chains view to execute it. If you haven't selected text first, the chain will use empty values for `{{selection}}` and `{{quote}}`. When a chain runs: 1. All variables are resolved (either automatically from the selection, or by prompting you) 2. Each step is added to the Prompt Queue in order 3. The queue sends each prompt one at a time, waiting for the AI to finish before sending the next > [!NOTE] > > Chains require the **Prompt Queue** feature to be enabled. If you try to run a multi-step chain without it, Ophel will prompt you to turn it on. ### Chain management Chains appear as cards in the Chains view. Each card shows: * The chain icon and name * Number of steps * Whether it's shown in the selection popover * Enable/disable toggle Click a chain card to execute it. Hover over a chain card to reveal: | Action | Description | | - | - | | ![Edit icon](/docs/images/icons/edit.svg) Edit | Opens the chain editor to modify steps, icon, or settings | | ![Copy icon](/docs/images/icons/copy.svg) Duplicate | Creates a copy of the chain | | ![Delete icon](/docs/images/icons/delete.svg) Delete | Removes the chain permanently | Chains are included in prompt backups and WebDAV sync. ### Built-in actions Two actions are always available in the selection popover: * **Copy** โ€” Copies the selected text to your clipboard * **Quote** โ€” Inserts the selected text as a blockquote into the input box, letting you add context before sending A default **Quote Reply** chain is also included, which inserts "Reply based on the quoted text below:" followed by the quoted selection. ## Settings Go to **Settings โ†’ Features โ†’ Prompts** to configure: | Setting | Description | | - | - | | Double-click to send prompt | Double-clicking a prompt inserts and submits it directly | | Send shortcut | Key used to submit to the AI after insertion โ€” **Enter** or | | ![Prompt Queue icon](/docs/images/icons/prompt-queue.svg) Prompt queue | Enable or disable the queue overlay feature | | Ophel selection quote | Enable or disable the selection popover for chains and quick actions | ## Example templates Here are some ready-to-use prompt templates that demonstrate variable syntax. Copy any of them directly into a new prompt. > **Translation with language selector** > > ```text theme={} > Translate the following text into {{target_language:English|Chinese|Japanese|French|Spanish|German}}. Keep the original formatting. > > {{text}} > ``` > **Code review with language choice** > > ````text theme={} > Review the following {{language:TypeScript|Python|Go|Rust|Java}} code. Focus on: readability, potential bugs, and performance. Output your findings in bullet points. > > ```{{language}} > {{code}} > ```` > > ```` > > > > ```text > Rewrite the following text in a {{tone:professional|casual|concise|detailed|humorous}} tone. Preserve the core meaning. > > {{text}} > ```` > **Meeting summary** > > ```text theme={} > Summarize the following meeting notes into: > 1. Key decisions > 2. Action items (with owner if mentioned) > 3. Open questions > > Meeting: {{meeting_title}} > Date: {{date}} > > Notes: > {{notes}} > ``` # Install Ophel Atlas on Chrome, Edge, Firefox, or as a Userscript Source: https://ophel.app/docs/installation Install Ophel Atlas from the Chrome Web Store, Edge Add-ons, Firefox Add-ons, Greasy Fork, ScriptCat, or sideload it manually from GitHub Releases in four steps or fewer. Ophel Atlas is available as a browser extension for Chrome-based browsers and Firefox, and as a userscript through Greasy Fork or ScriptCat. The browser extension is recommended โ€” it offers a fuller feature set, better compatibility, and does not require developer mode after the initial install. > [!TIP] > > Use the browser extension version whenever possible. The userscript version > has feature limitations compared to the extension and may have lower > compatibility on some platforms. > [!NOTE] > > GitHub Releases and browser store updates are separate steps. A new GitHub > Release means the files are available on GitHub, but Chrome Web Store, > Microsoft Edge Add-ons, Firefox Add-ons, Greasy Fork, and ScriptCat each have > their own submission, review, approval, and rollout process. Store and script > directory versions can temporarily lag behind GitHub Releases or differ from > each other. Check the public listing for each store to confirm the current > published version. ## Download ![Chrome icon](https://mintcdn.com/urzeye/mXhb1WlSKS61_yHv/images/icons/chrome.svg?fit=max\&auto=format\&n=mXhb1WlSKS61_yHv\&q=85\&s=ec6ed4fd0c33a96568c36c6f8dccf833) Chrome ![Chrome Web Store users badge](https://img.shields.io/chrome-web-store/users/lpcohdfbomkgepfladogodgeoppclakd?logo=google-chrome\&logoColor=white\&label=users\&color=4285F4) ![Chrome Web Store rating badge](https://img.shields.io/chrome-web-store/stars/lpcohdfbomkgepfladogodgeoppclakd?logo=google-chrome\&logoColor=white\&color=4285F4) [Open](https://chromewebstore.google.com/detail/ai-chat-organizer-outline/lpcohdfbomkgepfladogodgeoppclakd) ![Edge icon](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI5NnB4IiBoZWlnaHQ9Ijk2cHgiPjxwYXRoIGZpbGw9IiMxZTg4ZTUiIGQ9Ik00MC42OSwzNS40MmMtOS4xNSwxMS44OC0yMS40MSw4LjgtMjYuMjMsNi4xIGMtNy4zNS00LjExLTEyLjUtMTMuNjgtOS40NC0yMy4yNWMwLjktMi44MiwyLjI3LTUuMjMsMy45OC03LjIzYzEuNjcsMC4xMywzLjY1LDAuMTMsNi0wLjA0YzE0LTEsMTgsMTEsMTcsMTQgYy0wLjUxLDEuNTMtMi4zMiwyLjAyLTMuOTcsMi4xM2MwLjE2LTAuMjIsMC4zNi0wLjU0LDAuNjQtMS4wMmMwLjg3LTEuNTQsMC45OC00LjQ5LTEuNzMtNi4yN2MtMi42MS0xLjctNS40My0wLjY1LTYuODgsMS4yOCBjLTEuNDUsMS45Mi0wLjg4LDQuODEtMC4zNyw2LjA5YzIuMiw1LjUyLDYuMjYsNi45NSw5LjAyLDcuNzhjMi43NiwwLjgzLDYuODYsMC43MSw5LjA1LTAuMTljMi4xOC0wLjkxLDIuOC0xLjQzLDMuMjItMC45NyBDNDEuNDEsMzQuMjksNDEuMTEsMzQuODIsNDAuNjksMzUuNDJ6Ii8+PHBhdGggZmlsbD0iIzBkNDdhMSIgZD0iTTQwLjczMiwzNS40MmMtMy40OCw0LjUyLTcuNDEsNi44Ny0xMS4yMSw3LjkxIGMtMC4wMywwLjAxLTAuMDYsMC4wMS0wLjA4LDAuMDJjLTIuMiwwLjQyLTMuOTUsMC4wOC01Ljg1LTAuMjljLTMuMDktMC42LTcuMzUtNC4wMS04LjM4LTEwLjE4Yy0wLjg4LTUuMzEsMS42My05LjgxLDUuNTktMTIuNTQgYy0wLjI2LDAuMjQtMC40OSwwLjUtMC43LDAuNzhjLTEuNDUsMS45Mi0wLjg4LDQuODEtMC4zNyw2LjA5YzIuMiw1LjUyLDYuMjYsNi45NSw5LjAyLDcuNzhjMi43NiwwLjgzLDYuODYsMC43MSw5LjA1LTAuMTkgYzIuMTgtMC45MSwyLjgtMS40MywzLjIyLTAuOTdDNDEuNDUyLDM0LjI5LDQxLjE1MiwzNC44Miw0MC43MzIsMzUuNDJ6Ii8+PHBhdGggZmlsbD0iIzAwZTVmZiIgZD0iTTI2Ljk0LDQuMjVjMC4wMiwwLjI2LDAuMDMsMC41NCwwLjAzLDAuODFjMCwzLjc4LTEuNzUsNy4xNC00LjQ4LDkuMzIgYy0xLjAyLTAuNTItMi4yMS0wLjk0LTMuNjUtMS4yMmMtNC4wNy0wLjc4LTEwLjYzLDEuMS0xMy4zLDUuNzdjLTAuODgsMS41My0xLjI1LDMuMS0xLjQxLDQuNTVjMC4wNC0xLjcxLDAuMzMtMy40NiwwLjg5LTUuMjEgQzguMzEsOC4wMSwxNy44NiwzLjA1LDI2Ljk0LDQuMjV6Ii8+PHBhdGggZmlsbD0iIzAwZTY3NiIgZD0iTTQxLjQsMjcuODljLTIuNzYsMi43OC02LjI3LDIuODYtOC42NywyLjczIGMtMi40MS0wLjEyLTMuNTktMC44Mi00LjY5LTEuNWMtMS4xMS0wLjY5LTAuNDgtMS4zNy0wLjM3LTEuNTJjMC4xMS0wLjE1LDAuMzgtMC40MSwxLTEuNDljMC4yOS0wLjUxLDAuNS0xLjE4LDAuNTQtMS45MSBjNC42Mi0zLjQzLDcuOTYtOC40OSw5LjE2LTE0LjM0YzIuOTIsMi45NSw0LjMsNi4yMSw0Ljc5LDcuNjFDNDQuMDQsMTkuOTksNDQuNzEsMjQuNTYsNDEuNCwyNy44OXoiLz48cGF0aCBmaWxsPSIjMWRlOWI2IiBkPSJNMzguMzcsOS44NXYwLjAxYy0xLjIsNS44NS00LjU0LDEwLjkxLTkuMTYsMTQuMzRjMC4wMy0wLjQyLDAtMC44Ny0wLjEtMS4zMiBjMC0wLjAyLTAuMDEtMC4wNC0wLjAxLTAuMDVjLTAuMjUtMS40Ny0wLjk5LTMuMzMtMi4yMi00Ljc3Yy0xLjIyLTEuNDQtMi41Mi0yLjczLTQuMzktMy42OGMyLjczLTIuMTgsNC40OC01LjU0LDQuNDgtOS4zMiBjMC0wLjI3LTAuMDEtMC41NS0wLjAzLTAuODFjMC40LDAuMDUsMC43OSwwLjExLDEuMTksMC4xOUMzMi43NCw1LjMzLDM2LjA0LDcuNDksMzguMzcsOS44NXoiLz48L3N2Zz4=) Edge ![Edge install badge](https://img.shields.io/badge/Edge-0078D7?logo=microsoft-edge\&logoColor=white\&style=flat) [Open](https://microsoftedge.microsoft.com/addons/detail/ophel-atlas-ai-chat-navi/ffpenkdeifijngifjmbbpijfpdhlolga) ![Firefox icon](https://cdn.simpleicons.org/firefox/FF7139) Firefox ![Firefox Add-ons users badge](https://img.shields.io/amo/users/ophel-ai-chat-enhancer?logo=firefox\&logoColor=white\&label=users\&color=FF7139) ![Firefox Add-ons rating badge](https://img.shields.io/amo/stars/ophel-ai-chat-enhancer?logo=firefox\&logoColor=white\&color=FF7139) [Open](https://addons.mozilla.org/firefox/addon/ophel-ai-chat-enhancer/) ![Greasy Fork icon](https://cdn.simpleicons.org/greasyfork/4C4C4C) Greasy Fork ![Greasy Fork install count badge](https://img.shields.io/greasyfork/dt/563646?logo=tampermonkey\&logoColor=white\&label=installs\&color=4C4C4C) ![Greasy Fork rating count badge](https://img.shields.io/greasyfork/rating-count/563646?logo=tampermonkey\&logoColor=white\&label=ratings\&color=4C4C4C) [Open](https://greasyfork.org/scripts/563646-ophel-ai-chat-page-enhancer) ![ScriptCat icon](https://mintcdn.com/urzeye/Rsgx-P9Kl83CpF2I/images/icons/scriptcat.png?fit=max\&auto=format\&n=Rsgx-P9Kl83CpF2I\&q=85\&s=2c54afb1990270a3f9cb05748677a090) ScriptCat ![ScriptCat install badge](https://img.shields.io/badge/ScriptCat-install-1597FF?style=flat) [Open](https://scriptcat.org/script-show-page/6519) ## Install from a store or script directory **Chrome** Install directly from the Chrome Web Store โ€” no developer mode required. **1. Open the Chrome Web Store listing** Go to the [Ophel Atlas listing on the Chrome Web Store](https://chromewebstore.google.com/detail/ai-chat-organizer-outline/lpcohdfbomkgepfladogodgeoppclakd). **2. Click Add to Chrome** Click **Add to Chrome** and confirm the permissions prompt. **3. Open a supported AI site** Navigate to any [supported platform](/docs/introduction#supported-platforms) โ€” for example, [chatgpt.com](https://chatgpt.com) or [claude.ai](https://claude.ai). The Ophel panel appears automatically on the right side of the page. **Edge** Install directly from the Microsoft Edge Add-ons store. **1. Open the Edge Add-ons listing** Go to the [Ophel Atlas listing on the Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/detail/ophel-atlas-ai-chat-navi/ffpenkdeifijngifjmbbpijfpdhlolga). **2. Click Get** Click **Get** and confirm the permissions prompt. **3. Open a supported AI site** Navigate to any [supported platform](/docs/introduction#supported-platforms) โ€” for example, [chatgpt.com](https://chatgpt.com) or [claude.ai](https://claude.ai). The Ophel panel appears automatically on the right side of the page. **Firefox** Install from the Firefox Add-ons store for a persistent, auto-updating installation. **1. Open the Firefox Add-ons listing** Go to the [Ophel AI Chat Enhancer listing on Firefox Add-ons](https://addons.mozilla.org/firefox/addon/ophel-ai-chat-enhancer/). **2. Click Add to Firefox** Click **Add to Firefox** and confirm the permissions prompt. **3. Open a supported AI site** Navigate to any [supported platform](/docs/introduction#supported-platforms). The Ophel panel appears automatically. **Userscript (Tampermonkey)** Use this method if you cannot install browser extensions, or if you prefer the Tampermonkey workflow. > [!WARNING] > > The userscript version has feature limitations compared to the browser extension. Install the extension version when possible. **1. Install Tampermonkey** If you do not already have it, install [Tampermonkey](https://www.tampermonkey.net/) for your browser. **2. Open the Greasy Fork listing** Go to the [Ophel AI Chat Page Enhancer on Greasy Fork](https://greasyfork.org/scripts/563646-ophel-ai-chat-page-enhancer). **3. Click Install this script** Click **Install this script**. Tampermonkey opens a confirmation dialog โ€” click **Install**. **4. Open a supported AI site** Navigate to any [supported platform](/docs/introduction#supported-platforms). The Ophel panel appears automatically. **Userscript (ScriptCat)** Use this method if you prefer ScriptCat as your userscript manager. > [!WARNING] > > The userscript version has feature limitations compared to the browser extension. Install the extension version when possible. **1. Install ScriptCat** If you do not already have it, install [ScriptCat](https://scriptcat.org/) for your browser. **2. Open the ScriptCat listing** Go to the [Ophel AI Chat Page Enhancer on ScriptCat](https://scriptcat.org/script-show-page/6519). **3. Install the script** Click the install button on ScriptCat and confirm the installation in ScriptCat. **4. Open a supported AI site** Navigate to any [supported platform](/docs/introduction#supported-platforms). The Ophel panel appears automatically. ## Manual sideload from GitHub Releases Use this method if you want to install a specific version, test a pre-release build, or install without a store. > [!WARNING] > > Do not install `*-cws-upload.zip` or `*-edge-addons-upload.zip` manually. > Those files are maintainer submission packages for browser stores. They do not > mean the store version has already been approved or rolled out. **Chrome / Edge (manual)** **1. Download the release archive** Go to [GitHub Releases](https://github.com/urzeye/ophel/releases) and download the latest `ophel-vX.X.X-chrome.zip`. **2. Unzip the archive** Extract the zip to a permanent folder on your computer. Do not delete the folder after loading โ€” the browser loads the extension from it every time. **3. Open the extensions page** In Chrome: navigate to `chrome://extensions`. In Edge: navigate to `edge://extensions`. **4. Enable Developer mode** Toggle **Developer mode** on (top-right corner of the extensions page). **5. Load the unpacked folder** Click **Load unpacked** and select the folder you extracted in step 2. **Firefox (manual)** > [!WARNING] > > Firefox only allows temporary add-on loading through the debugging interface. The add-on is removed when you restart the browser, so you must reload it after each restart. For a persistent install, use the [Firefox Add-ons store](#install-from-a-store) tab above. **1. Download the release archive** Go to [GitHub Releases](https://github.com/urzeye/ophel/releases) and download the latest `ophel-vX.X.X-firefox.zip`. **2. Open the Firefox debugging page** Navigate to `about:debugging#/runtime/this-firefox`. **3. Load the temporary add-on** Click **Load Temporary Add-on** and select the downloaded zip file. You do not need to extract it. **Userscript (manual)** **1. Install Tampermonkey** If you do not already have it, install [Tampermonkey](https://www.tampermonkey.net/) for your browser. **2. Download the userscript file** Go to [GitHub Releases](https://github.com/urzeye/ophel/releases) and download the latest `.user.js` file. **3. Install the script** Drag the `.user.js` file into your browser window, or open the Tampermonkey dashboard and use **Import from file**. Confirm the install when prompted. ## Next steps Once installed, open any [supported AI site](/docs/introduction#supported-platforms) and read the [Panel Overview](/docs/panel-overview) to understand the three tabs, floating buttons, ghost mode, and edge snap. # Introduction Source: https://ophel.app/docs/introduction Learn what Ophel Atlas does, which AI platforms it supports, and how its outline, conversation management, and prompt library features improve your workflow. Ophel Atlas is a browser extension that transforms AI chat sessions from endless scrollable threads into structured, navigable documents. It runs locally in your browser by default โ€” no Ophel account or Ophel server required โ€” and activates automatically on any of the 15 supported AI platforms the moment you open them. ## What problem does Ophel solve? Long AI conversations are hard to navigate. You lose track of earlier conclusions, can't jump between topics, and end up re-reading hundreds of messages. Ophel attaches a persistent side panel to the chat page that auto-generates a live outline, helps keep conversations organized in folders, and stores your best prompts for instant reuse. The result is an AI workflow you can actually navigate. ## Key features > **Live outline navigation** > > Ophel continuously parses the conversation structure and builds a navigable > table of contents. Click any heading to jump to it instantly. Supports > hierarchical collapse, bookmarks, and real-time word counts per section. > **Conversation management** > > Conversations from the current AI platform appear in one organized view. > Organize them into folders and tags, search by keyword or syntax > filter, and export to ![Markdown file icon](/docs/images/icons/markdown.svg) > Markdown, ![JSON file icon](/docs/images/icons/json-file.svg) > JSON, or ![TXT file icon](/docs/images/icons/txt-file.svg) TXT. > **Prompt library** > > Build a personal library of reusable prompts. Prompts support variable > substitution with default values, option menus, or free-text input. One > click inserts into the chat box; double-click sends immediately. > **Global search** > > Press to open a unified search across your > outline, conversations, prompts, and settings. Supports advanced syntax > filters such as `folder:`, `tag:`, `date:`, and `type:`. > **Reading enhancements** > > Mermaid diagram rendering, LaTeX formula display, Markdown formatting for > user messages, scroll lock to prevent jump-to-bottom during generation, and > automatic reading history restore when you return to a conversation. > **Productivity tools** > > Theme customization with 24 presets, widescreen and zen modes, model lock > per site, auto tab renaming, desktop completion notifications, and a > customizable shortcut system. ## Supported platforms Ophel works on 15 AI chat platforms out of the box โ€” install adapter packs from the [Site Packs](/docs/enhancements/site-extensions) section to hot-swap support for even more sites: | Platform | URL | | - | - | | ![ChatGPT logo](/docs/images/icons/chatgpt.png) **ChatGPT** | [chatgpt.com](https://chatgpt.com) | | ![Gemini logo](/docs/images/icons/gemini.png) **Gemini** | [gemini.google.com](https://gemini.google.com) | | ![Gemini Enterprise logo](/docs/images/icons/gemini-enterprise.png) **Gemini Enterprise** | [business.gemini.google](https://business.gemini.google) | | ![AI Studio logo](/docs/images/icons/aistudio.png) **AI Studio** | [aistudio.google.com](https://aistudio.google.com) | | ![Claude logo](/docs/images/icons/claude.svg) **Claude** | [claude.ai](https://claude.ai) | | ![Grok logo](/docs/images/icons/grok.png) **Grok** | [grok.com](https://grok.com) | | ![DeepSeek logo](/docs/images/icons/deepseek.svg) **DeepSeek** | [chat.deepseek.com](https://chat.deepseek.com) | | ![Doubao logo](/docs/images/icons/doubao.png) **Doubao** | [www.doubao.com](https://www.doubao.com) | | ![Kimi logo](/docs/images/icons/kimi.png) **Kimi** | [www.kimi.com](https://www.kimi.com) | | ![Qwen Studio logo](/docs/images/icons/qwenai.png) **Qwen Studio** | [chat.qwen.ai](https://chat.qwen.ai) | | ![Qianwen logo](/docs/images/icons/qianwen.png) **Qianwen** | [www.qianwen.com](https://www.qianwen.com) | | ![Yuanbao logo](/docs/images/icons/yuanbao.png) **Yuanbao** | [yuanbao.tencent.com](https://yuanbao.tencent.com) | | ![Z.ai logo](/docs/images/icons/zai.png) **Z.ai** | [chat.z.ai](https://chat.z.ai) | | ![ChatGLM logo](/docs/images/icons/chatglm.png) **ChatGLM** | [chatglm.cn](https://chatglm.cn) | | ![ima logo](/docs/images/icons/ima.jpg) **ima** | [ima.qq.com](https://ima.qq.com) | ## Privacy and data > [!NOTE] > > Ophel is privacy-first by design. No account is required to use it. Your settings, prompts, and conversation management data are stored in your browser using local storage. Ophel never collects or uploads conversation content. > > Optional permissions are requested only when a feature needs them, and you can revoke them at any time from the **Permissions** page in the extension. If you want multi-device sync, you can configure your own WebDAV server โ€” Ophel never acts as a sync intermediary. ## Use cases Ophel is designed for anyone who has extended, high-value conversations with AI: * **Learning and research** โ€” navigate long reasoning threads, extract conclusions, and build notes from AI responses * **Software development** โ€” track bug investigations, architecture discussions, and long code reviews across sessions * **Content creation** โ€” iterate on scripts and outlines, jump back to key passages, and export polished drafts * **Daily work** โ€” organize requirements, meeting notes, and consulting workflows into retrievable folders * **Power users** โ€” apply structured prompts, queue prompt sequences, and lock preferred models per platform # Navigate the Ophel panel: tabs, buttons, and modes Source: https://ophel.app/docs/panel-overview Learn how Ophel's side panel is organized โ€” three tabs, a header toolbar, floating quick buttons, ghost pass-through mode, edge snap, and keyboard shortcuts. After you install Ophel Atlas and open any supported AI site, the panel activates automatically. A side panel appears on the right edge of the screen, and a small group of floating quick-action buttons appear nearby. This page explains how each part of the panel works so you can navigate it efficiently from day one. If the panel does not appear, press to open it. ## The three tabs ![Ophel side panel โ€” three tabs overview](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/panel-tabs.png?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=141737be3544a5375f83ad741b340b24) The panel has three tabs along the top. Click a tab label to switch, or use , , . > **Outline** > > A live, auto-generated table of contents for the current conversation. Click > any heading to jump to it instantly. Supports collapse, expand, search, > bookmarks, and real-time word counts. > **Conversations** > > The current AI platform's conversation history in one organized view. > Organize conversations into folders and tags, search with syntax filters, and export > to ![Markdown file icon](/docs/images/icons/markdown.svg) > Markdown, ![JSON file icon](/docs/images/icons/json-file.svg) > JSON, or ![TXT file icon](/docs/images/icons/txt-file.svg) TXT. > **Prompts** > > Your personal prompt library. Click a prompt to insert it into the chat > input box; double-click to insert and send immediately. Supports variable > substitution, categories, and pinning. Drag a tab label to reorder the visible tabs. Ophel saves the new order immediately and mirrors it in Settings, so you do not need to open the options page first. ## Panel header The strip at the very top of the panel gives you fast access to core controls. | Element | Action | | - | - | | **Title area** | Hover to see a random usage tip with shortcuts adapted to your OS and key bindings. Double-click to toggle privacy mode, which hides the tab title. | | **Mode toggle** | Switches between Edge Snap and Floating mode with one click. | | **Theme toggle** | Switches between light and dark mode. Shortcut: . | | ![Settings icon](/docs/images/icons/settings.svg) **Settings button** | Opens the settings dialog. You can also press or click ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** โ†’ ![Settings icon](/docs/images/icons/settings.svg) **Settings**. | You can drag the title bar to reposition the panel anywhere on screen when it is in Floating mode. **Double-clicking** the title bar toggles between Edge Snap and Floating mode without opening settings. In Floating mode, drag the resize handle on the panel edge facing the page to change the saved panel width directly. ## Floating quick buttons ![Floating quick buttons โ€” expanded state and collapsed pill](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/floating-buttons.png?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=3407c52ae11d8640fe975e95fb507cf6) The floating button group at the screen edge is your fastest access point to common actions without opening the full panel. * The group **auto-collapses** into a pill shape after about 5 seconds of inactivity. By default, moving your cursor within **150 px** of it expands it again. The wake distance is configurable: go to **Settings โ†’ General โ†’ Shortcuts โ†’ Proximity wake distance** (0โ€“300 px). Set it to **0** to enable dwell-hover mode โ€” the group only expands after the cursor rests on the pill for 300 ms, so simply passing through it does not trigger expansion. * When the group is collapsed, hover the panel logo for a short dwell to open a temporary panel preview beside the buttons. Moving away hides the preview; clicking the logo still opens or closes the panel persistently. * **Long-press and drag** any button to reposition the entire group to a different spot on screen. Default icons in the button group: | Icon | Action | | - | - | | ![Panel toggle icon](/docs/images/icons/sparkle.svg) **Panel toggle** | Opens or closes the Ophel panel. When the group is collapsed, a short dwell previews the panel temporarily. | | ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** | Opens additional conversation and page actions. | | ![Global search icon](/docs/images/icons/search.svg) **Global search** | Opens global search across outlines, conversations, prompts, and settings. | | ![Theme toggle icon](/docs/images/icons/theme-system.svg) **Theme toggle** | Switches between light and dark mode; the icon changes with the current theme state. | | ![Zen mode icon](/docs/images/icons/eye.svg) **Zen mode** | Toggles Zen Mode for the current site. Enabling it also enables Clean Mode, and the icon changes to a closed eye. | | ![Settings icon](/docs/images/icons/settings.svg) **Settings** | Opens the settings dialog. | | ![Scroll to top icon](/docs/images/icons/scroll-top.svg) **Scroll to top** | Loads full history and jumps to the top of the current conversation. | | ![Return to anchor icon](/docs/images/icons/anchor.svg) **Return to anchor** | Jumps back to the last saved position and saves the current position as the new anchor. | | ![Scroll to bottom icon](/docs/images/icons/scroll-bottom.svg) **Scroll to bottom** | Jumps to the latest message. | Click ![Toolbox icon](/docs/images/icons/tools.svg) **Toolbox** to reveal these menu icons: | Icon | Action | | - | - | | ![Export icon](/docs/images/icons/export.svg) **Export** | Exports the current conversation. | | ![Segmented export icon](/docs/images/icons/segmented-export.svg) **Export segments** | Selects and exports specific parts of the current conversation. | | ![Copy Markdown icon](/docs/images/icons/copy.svg) **Copy Markdown** | Copies the current conversation as Markdown. | | ![Move conversation icon](/docs/images/icons/folder-move.svg) **Move conversation** | Selects a target folder and moves the current conversation. | | ![Set tag icon](/docs/images/icons/tag.svg) **Set tag** | Adds, removes, or changes tags on the current conversation. | | ![Scroll lock icon](/docs/images/icons/scroll-lock.svg) **Scroll lock** | Locks the page scroll position to prevent automatic jumps. | | ![Model lock icon](/docs/images/icons/model-lock.svg) **Model lock** | Applies the configured model keyword for the current site; if none is configured, it opens site settings. | | ![Clear invalid bookmarks icon](/docs/images/icons/cleanup.svg) **Clear invalid bookmarks** | Removes invalid bookmarks / anchor records from the current conversation. | | ![Settings icon](/docs/images/icons/settings.svg) **Settings** | Opens the settings dialog. | **Additional settings** (`Settings โ†’ General โ†’ Shortcuts`): | Setting | Description | | - | - | | **Proximity wake distance** | Distance (px) at which the cursor wakes up the collapsed pill (default 150). Set to 0 for dwell-hover mode. | | **Quick buttons opacity** | Transparency of the button group in its collapsed / idle state. | | **Hide quick buttons when panel is open** | Automatically collapses the quick button group while the panel is open; it reappears when the panel closes. | ## Keyboard shortcuts Cross-platform key mapping Shortcuts show both Windows/Linux and Mac keys: `Ctrl` maps to `Command`, and `Alt` maps to `Option`. Prompt submit is the only exception: `Ctrl+Enter` remains `Ctrl+Enter` on Mac. | Action | Default shortcut | | - | - | | Open / close panel | | | Toggle panel mode | | | Switch to Outline tab | | | Switch to Conversations tab | | | Switch to Prompts tab | | | Global search | or double `Shift` | | Toggle light / dark | | | Open settings | | ## Global search Press , tap `Shift` twice, or click the ![Global search icon](/docs/images/icons/search.svg) search icon in the floating quick buttons to open global search. It searches across your outline headings, current platform conversation history, prompt library, and settings in a single query. You can also use advanced syntax filters: | Filter | Example | Effect | | - | - | - | | `folder:` | `folder:work` | Limit to a specific folder | | `tag:` | `tag:research` | Limit to a specific tag | | `type:` | `type:prompt` | Limit to a content type | | `date:` | `date:2025-01` | Limit to a date range | | `level:` | `level:2` | Limit to a heading level in Outline | | `is:` | `is:pinned` | Limit to pinned items | ## Ghost pass-through mode ![Ghost mode โ€” semi-transparent panel with click-through enabled](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/ghost-mode.webp?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=a81f47df60ac520403b297f7d57c8800) The panel sometimes sits over content you need to click on the AI page. Instead of closing the panel, use ghost mode: Hold for about 0.2 seconds on its own. The panel turns semi-transparent and mouse clicks pass directly through it to the page behind. Release the key to return to normal mode. > [!TIP] > > Ghost mode is useful when the AI response contains a button or link that the > panel overlaps. You do not need to close or move the panel โ€” just hold the > modifier key, click, then release. ## Edge snap and floating mode ![Panel edge snap โ€” hover to peek preview](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/edge-snap.webp?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=f407ec517efad7c00b3870e20fe60758) The panel operates in one of two modes. Switch between them using the **mode toggle button** in the panel header, or go to **Settings โ†’ General โ†’ Panel โ†’ Panel Mode**. | Mode | Behavior | | - | - | | **Edge Snap** | The panel hugs the screen edge and stays hidden. Hover over the edge to peek at the panel content. | | **Floating** | The panel floats above the page, stays fully visible at all times, and can be freely repositioned by dragging the title bar. | In Edge Snap mode, dragging the panel title bar pulls it away from the edge, switching it to Floating mode. While dragging, move it to the opposite side of the screen to change the snap direction. ### Panel size and position settings All of these are in **Settings โ†’ General โ†’ Panel**: | Setting | Description | Default | | - | - | - | | Panel mode | Edge Snap or Floating | Floating | | Default Side | Left or right side of the screen | Right | | Panel Width | Saved panel width (240โ€“600 px); can also be changed by dragging the Floating panel edge | 320 px | | Widen on hover (Beta) | Temporarily widens the Floating panel while your cursor or keyboard focus is on it | Off | | Hover width (Beta) | Temporary width used while **Widen on hover** is active | 520 px | | Panel Height | 50โ€“100 vh | 85 vh | | Snap Threshold | How close to the edge a drag triggers snapping, 0โ€“400 px (Edge Snap mode only) | 30 px | | Default Margin | Initial distance between the Floating panel and the screen edge, 0โ€“400 px (Floating mode only) | 0 px | ### Quick buttons behavior In **Settings โ†’ General โ†’ Shortcuts โ†’ Quick Buttons Behavior**, you can also toggle: * **Hide quick buttons when panel is open** โ€” the floating button group automatically hides while the panel is open, and reappears when you close the panel. ## Next steps > **[Smart outline](/docs/features/outline)** > > Learn how the live outline works โ€” locate mode, follow mode, bookmarks, and > word counts. > **[Conversation management](/docs/features/conversations)** > > Organize your chat history with folders, tags, search, and batch exports. > **[Prompt library](/docs/features/prompts)** > > Build and use a reusable prompt library with variable templates and a prompt > queue. > **[Shortcuts](/docs/customization/shortcuts)** > > View the full shortcut reference and configure custom key bindings. # Troubleshoot common Ophel Atlas problems step by step Source: https://ophel.app/docs/troubleshooting Step-by-step fixes for the most common Ophel Atlas problems: panel not showing, empty outline, stalled prompt queue, Firefox restarts, and more. If something isn't working as expected, this page walks you through the most common issues and how to fix them. For problems not covered here, open a report on [GitHub Issues](https://github.com/urzeye/ophel/issues) with your browser version, extension version, and any errors from the browser console. ## Panel not appearing ![Ophel side panel โ€” three tabs overview](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/panel-tabs.png?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=141737be3544a5375f83ad741b340b24) The Ophel side panel should appear automatically when you open a supported AI platform. If it doesn't show up: **1. Confirm the extension is enabled** Click the puzzle-piece icon in your browser toolbar and verify that Ophel Atlas is toggled on. If it's disabled, enable it and reload the page. **2. Hard-reload the page** Press to force a full page reload. A standard reload sometimes does not reinitialize the Ophel panel on the page. **3. Check the supported site list** Ophel only activates on its supported platforms. Confirm you're on one of the 15 supported sites (Gemini, ChatGPT, Claude, DeepSeek, Grok, and others). If the URL doesn't match, Ophel will not inject the panel. **4. Use the keyboard shortcut as a fallback** If the panel was previously closed, press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to reopen it. This toggles the panel regardless of the state of any floating buttons. ## Outline is empty or not updating ![Outline tab โ€” real-time conversation tree](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/outline-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=abe7cdad0df665392c5cc949b9a43da3) **1. Refresh the outline manually** Press ![Refresh outline icon](/docs/images/icons/refresh.svg) to force the outline to re-scan the conversation. Some AI platforms update the DOM asynchronously, so the outline may not populate on its own immediately after the page loads. **2. Wait for the AI to finish responding** The outline rebuilds after each AI reply completes. If the AI is still generating, the outline won't update until it finishes. **3. Check the auto-update setting** Go to **Settings โ†’ Features โ†’ Outline** and confirm that **Auto-update outline during conversation** is enabled. If it's off, the outline only refreshes when you trigger it manually with . ## Outline not tracking scroll position If the outline doesn't highlight the section you're currently reading as you scroll: **1. Check the follow mode setting** Go to **Settings โ†’ Features โ†’ Outline** and set **Outline Follow Mode** to **Follow Current Position**. When set to **Manual Control**, the outline does not automatically track your scroll position. ## Floating buttons disappeared ![Floating action buttons โ€” expanded and collapsed pill state](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/floating-buttons.png?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=3407c52ae11d8640fe975e95fb507cf6) The floating action buttons auto-collapse into a compact pill shape after 5 seconds of inactivity. They are not gone โ€” they're just minimized. **1. Move your mouse near the buttons** Move your cursor within approximately 150 px of the collapsed pill. The buttons will expand automatically. **2. Use the keyboard shortcut if the pill is not visible** If the buttons are completely missing from the screen, press ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) to open the panel. The floating buttons reappear alongside it. ## Panel covering page content ![Ghost mode โ€” semi-transparent panel with click-through enabled](https://mintcdn.com/urzeye/AGLEIfLkr4uHH1zd/images/panel/ghost-mode.webp?fit=max\&auto=format\&n=AGLEIfLkr4uHH1zd\&q=85\&s=a81f47df60ac520403b297f7d57c8800) If the Ophel panel is positioned over something you need to click on the underlying page: **1. Use ghost mode for temporary click-through** Hold alone for about 0.2 seconds. The panel becomes transparent and lets clicks pass through to the page behind it. Release the key to restore the panel to normal. **2. Drag the panel to a screen edge** Drag the panel toward any screen edge. When it snaps into place, it hides against the edge and only slides out when you hover over it โ€” freeing up the rest of the screen. To undock it, drag it away from the edge. ## Conversations tab is empty ![Conversations tab โ€” folder and tag list](https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/conversation-en.png?fit=max\&auto=format\&n=9I8m8P8gSndxcYtq\&q=85\&s=cb447fe91815933df0f4d066de8ae68f) **1. Make sure the AI platform's sidebar has loaded** The Conversations tab reads directly from the AI platform's own sidebar. If that sidebar hasn't loaded yet, Ophel has nothing to display. **2. Scroll the native sidebar** Open the AI platform's built-in conversation list and scroll down to trigger it to load more items. After it loads, Ophel's Conversations tab will reflect the updated list. ## Prompt queue stalled The ![Prompt Queue icon](/docs/images/icons/prompt-queue.svg) Prompt Queue advances to the next prompt by detecting when the AI page becomes idle โ€” specifically, when no active generation spinner is visible for two consecutive polling intervals (roughly 2 seconds). **1. Check whether the AI has actually finished** Some platforms briefly show a loading indicator even after generation is complete. Wait a few seconds to see if the queue advances on its own. **2. Force-send a pending item** If the AI platform uses an unusual loading indicator that Ophel cannot detect, the queue may stall. Open the queue overlay with ![Keyboard shortcut icon](/docs/images/icons/keyboard.svg) , then use **Force Send** on the pending item you want to send now. ## Firefox: extension removed after browser restart Firefox treats extensions loaded via **Load Temporary Add-on** (through `about:debugging`) as temporary add-ons. They are automatically removed every time you restart Firefox. **1. Install from Firefox Add-ons for a permanent install** Install Ophel Atlas from the [Firefox Add-ons store](https://addons.mozilla.org/firefox/addon/ophel-ai-chat-enhancer/). Store-installed extensions persist across restarts. **2. Use the userscript as an alternative** If you need to use a local build or cannot use the Add-ons store, install the userscript version via Tampermonkey. Userscripts managed by Tampermonkey are not affected by Firefox's temporary add-on limitation. ## Something else is broken If none of the above applies, follow these steps to diagnose the issue before reporting it: **1. Test in an incognito window** Open an incognito (private) window with only Ophel enabled and no other extensions. If the problem disappears, another extension is likely interfering. **2. Check the browser DevTools console** Right-click anywhere on the page, choose **Inspect**, and open the **Console** tab. Look for red error messages that mention Ophel or the AI platform. Copy any errors you find โ€” they're essential for a bug report. **3. Note your versions** Before reporting, note your browser name and version, your Ophel Atlas version (shown in the extension popup), and the affected AI platform URL. **4. Report on GitHub Issues** Open a new issue at [github.com/urzeye/ophel/issues](https://github.com/urzeye/ophel/issues) with the information from the steps above. Include the console output and a description of how to reproduce the problem. > **[Report an issue on GitHub](https://github.com/urzeye/ophel/issues)** > > Open a bug report or feature request on the Ophel Atlas GitHub Issues page. > Include your browser version, extension version, and any console errors to > help the team reproduce the problem.