Model or dataset
bujue3709/GPT-Conversation-Toolkit avatar
bujue3709/GPT-Conversation-Toolkit

GPT-Conversation-Toolkit: a ChatGPT web extension for export, search and prompt management

A useful plugin for the ChatGPT web platform, focusing on long conversation browsing, exporting, searching, prompt management, and timeline navigation. 🚀||优化ChatGPT长会话卡顿,聊天记录一键导出,消息搜索跳转,会话管理,prompt管理和时间线导航

946 stars27 forksJavaScriptMIT

At a glance

What is it?
GPT-Conversation-Toolkit is an MIT-licensed browser extension that adds export, keyword search, a prompt library, a message timeline and sidebar folders to the ChatGPT web interface. Its most interesting design decision is that it reads conversation data from the API rather than the DOM, which is also where its limits come from.
Who is it for?
Adopt it if you already use ChatGPT in a Chromium browser and want conversation export, message search or a reusable prompt library without leaving the page. Skip it if you need a signed store build, if you rely on Firefox or Safari, or if you cannot accept that exported history depends on a token fetched from /api/auth/session.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 15 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What GPT-Conversation-Toolkit adds to the ChatGPT web UI

The extension targets two hosts: https://chat.openai.com/* and https://chatgpt.com/*. Everything it does happens inside the page you already have open. There is no companion server, no account to create and no data leaving the browser beyond the requests the page itself makes.

The feature set splits into two groups. The first group is about the conversation: export to .json, .txt or .md, keyword search with highlight and next/previous jumping, a timeline of user messages on the left side of the conversation area, and a floating toolbar in the bottom right corner. The second group is about everything around the conversation: a prompt library with categories, sorting, JSON import and export, and a folder bar above the sidebar heading "你的聊天" that lets you group conversations by drag and drop.

The audience is narrow and specific. This is for people who keep long threads alive for weeks, who need to pull a transcript out of the browser, or who paste the same instructions repeatedly. The README states plainly that bujue3709 is the main and only active maintainer, so the project's pace is one person's pace. That is worth knowing before you build a workflow on it.

Why the extension reads conversations from the API instead of the DOM

ChatGPT web renders conversations through a virtualized list. Only messages near the viewport stay in the DOM, and older ones are unmounted when you scroll away. Any extension that counts or searches messages by walking the DOM will silently miss everything that is not currently mounted.

GPT-Conversation-Toolkit works around this by treating the API as the primary data source and the DOM as a fallback. According to the README, it calls /api/auth/session to obtain a short-lived access token for the current login, then reads conversation data with Bearer authentication. The token stays in page memory; the README says it is not written to a file or to browser storage. Requests prefer include_full_conversation=true so the full active branch comes back, and v1.4.1 added cursor pagination compatibility for /backend-api/conversations/{id} so historical pages can be read in order and reassembled.

Jumping is the second half of the mechanism. When you click a search result or a timeline node, the extension locates the target message, waits for ChatGPT to mount the corresponding DOM node, then confirms the node by message ID or by a text fragment. That wait-then-confirm loop is what makes deep-link navigation work at all under virtualization.

One consequence deserves emphasis: the old long-conversation collapse feature is deprecated. The README argues that ChatGPT's own virtualization already controls DOM size, and that extra hiding can interfere with search, timeline positioning and normal page interaction. A "恢复隐藏消息" entry remains, but only to clean up state left behind by earlier versions.

Installing GPT-Conversation-Toolkit from the repository root

There is no store listing in the README. Installation is an unpacked load from the project root, which means you clone or download the repository first and then point the browser at that directory.

For Chrome, open chrome://extensions/, enable developer mode, click "Load unpacked" and select the project root. Edge is the same flow at edge://extensions/ with "Load unpacked". Firefox uses a temporary load instead:

bash
# Firefox temporary install
# 1. open about:debugging#/runtime/this-firefox
# 2. click "Load Temporary Add-on"
# 3. select manifest.json from the project root

The README marks Edge and Chrome as formally supported, Firefox as temporarily loadable with proper support planned later, and Safari on macOS as under evaluation. If you are on Firefox, expect to reload the add-on after a browser restart, since temporary installs do not persist.

After loading, open a ChatGPT conversation. A floating panel labelled "ChatGPT 工具" appears in the bottom right. From there you can export, search, open the prompt library, toggle the timeline, open settings or switch language. Clicking "收起" collapses the panel into a draggable circular button that snaps to the edge; a single click restores it.

The first practical step is usually export. Click "导出", choose all turns or a subset, optionally switch to GPT answers only, and pick a format. The README notes that the selection dialog supports select-all, invert, clear, Shift range selection and paging, and that selection state survives page changes. If API data is unavailable, the extension falls back to loaded or cached content and shows an incompleteness warning in the selection dialog, along with an error code and HTTP status.

The API-first design is also the main failure mode

Reading conversations through an authenticated endpoint couples the extension to an interface it does not control. The v1.4.1 notes describe exactly this: ChatGPT web changed its conversation interface on 2026-08-22, and long conversations exported through the API were missing early messages until the fix shipped. That is a nine-day window in which a core feature returned incomplete data. Nothing in the README suggests a contract or a stability guarantee that would prevent a repeat.

The degradation path is honest but limited. When the API fails, export falls back to whatever is loaded or cached, and the selection dialog reports an error code and HTTP status so you can tell an account restriction from an interface change. But a fallback export of a virtualized conversation is exactly the incomplete result the API path exists to avoid. If your use case is archival, verify the exported file against the conversation before you delete anything.

The second limitation is browser coverage. Firefox is a temporary load, Safari is under evaluation, and both are described as such in the README. If your team standardizes on Firefox, this is not a tool you can deploy.

The third is the deprecated collapse feature. Users who installed an earlier version and relied on it will find it no longer recommended, and the README explicitly warns that leftover collapse state can break search until you run "恢复隐藏消息". That is a migration step, not a bug, but it is easy to miss.

How GPT-Conversation-Toolkit compares to a userscript or a separate exporter

The obvious alternative is a userscript manager such as Tampermonkey or Violentmonkey running a ChatGPT export script. The difference is architectural rather than cosmetic. A userscript typically reads the page it is injected into, which under a virtualized list means it sees only mounted messages unless its author also implements API reads, pagination and mount-waiting. GPT-Conversation-Toolkit ships that logic as separate modules: features/export.js for export, features/export-selection.js for turn selection and paging, features/search.js for search, features/timeline.js for the node list, features/folders.js for sidebar grouping, features/prompt-library.js for prompts, features/latex-copy.js for formula copying, and features/collapse.js retained only for legacy state.

The second alternative is exporting from ChatGPT's own data export and processing the archive offline. That path is independent of any interface change and gives you a complete history, but it is not interactive: you cannot search the current thread, jump to a message or copy a formula while you work. The toolkit's value is in-page immediacy, and that is precisely the property that makes it sensitive to interface changes.

A third comparison is a prompt manager living outside the browser. The built-in library here supports search across title, category and content, category filtering, sorting by update time, title or category, JSON import and export, and click-to-copy. It is a convenience layer, not a synced knowledge base; the README does not describe any server-side sync.

Settings, persistence and what the MIT licence means here

Configuration lives in core/state.js and is exposed through a settings dialog in the toolbar. The README lists exportFormat (json, txt, md), exportRole (all or assistant) and latexCopyFormat (raw plus several delimiter wrappers such as Markdown inline $...$, Markdown block $$...$$, LaTeX inline \(...\) and LaTeX display \[...\]). Changes take effect without a page reload and are written to local storage.

Some constants are only editable by editing the source:

js
const TIMELINE_VISIBLE_NODE_CAPACITY = 10;
const TIMELINE_MAX_NODES = 20;
const COLLAPSE_AUTO_REOPTIMIZE_BUFFER = 10;

The first two control how many timeline nodes fit on screen and the maximum number of sampled nodes. The third belongs to the deprecated collapse feature and has no effect on the current workflow. Timeline node counts are displayed as current node over total user nodes.

The licence is MIT, which permits commercial and private use, modification and redistribution provided the copyright notice and permission notice are included. That is a permissive arrangement with no copyleft obligation and no warranty. It says nothing about the ChatGPT terms of service, and nothing in the README addresses whether automated reads of your own conversation data through the page's API are within those terms. Treat that as a question for your own legal review rather than something the licence settles.

Maintenance cost is the real number to watch. The last push was on 2026-09-01, and releases came at roughly two to four week intervals through v1.4.0, v1.4.1 and v1.4.2. A single maintainer tracking a moving target means you should expect to update the unpacked extension when the interface shifts, and to re-verify export completeness after each update.

Editorial conclusion

Adopt it if you already use ChatGPT in a Chromium browser and want conversation export, message search or a reusable prompt library without leaving the page. Skip it if you need a signed store build, if you rely on Firefox or Safari, or if you cannot accept that exported history depends on a token fetched from /api/auth/session. Before installing, read features/export.js and features/search.js to confirm the API-first path matches your account type, and check whether your browser language is one of the two shipped locales.

Frequently asked questions

Which browsers does GPT-Conversation-Toolkit support?

The README lists Microsoft Edge and Google Chrome as formally supported. Firefox can be loaded temporarily, with proper support planned later, and Safari on macOS is described as under evaluation.

How do I install GPT-Conversation-Toolkit?

It installs as an unpacked extension. Open chrome://extensions/ or edge://extensions/, enable developer mode, click load unpacked, and select the project root directory. Firefox loads manifest.json through about:debugging#/runtime/this-firefox as a temporary add-on.

What export formats does GPT-Conversation-Toolkit support?

It exports conversations as .json, .txt or .md, and you can choose to include all question-and-answer turns or only the GPT answers. The default format and default content are configurable in the settings dialog.

Why does GPT-Conversation-Toolkit read conversation data from the API?

ChatGPT web uses a virtualized list, so only messages near the viewport are present in the DOM. The extension reads conversation data through the API so that search, timeline and export can cover messages that are not currently mounted.

Is the long conversation optimization feature in GPT-Conversation-Toolkit still useful?

No. The README states that the old collapse feature is deprecated because ChatGPT's own virtualization already unmounts messages away from the viewport, and that extra hiding can interfere with search, timeline navigation and normal page interaction.

What is the licence for GPT-Conversation-Toolkit?

The repository is licensed under MIT, which allows use, modification and redistribution as long as the copyright and permission notice are kept. The licence does not address ChatGPT's own terms of service.

Official sources

  1. bujue3709/GPT-Conversation-Toolkit on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Community notes

Community notes