Faster long conversations and private, on-device exports — built for Safari.
Features · Installation · Usage · Export · Privacy · Development
ChatGPT Tools keeps long ChatGPT conversations responsive in Safari by limiting how much history the page has to render. The complete loaded branch remains available to the built-in exporter — with no cloud service, analytics, or third-party processing of your conversations.
Important
The GitHub release contains a developer build of the Safari Web Extension. You can load it temporarily as an unsigned extension on macOS. Permanent installation and distribution require an app container created and signed with Xcode.
| Feature | What it does | |
|---|---|---|
| ⚡️ | Faster long conversations | Gives the ChatGPT interface only the most recent messages instead of rendering the entire history. |
| 🎚️ | Precise message limit | Use the slider or enter a value directly: 1–20 normally, or 1–100 with Extended range. |
| 📦 | Complete local export | Select individual messages and save the conversation as Markdown, TXT, JSON, CSV, or PDF. |
| 🧠 | Context preserved | Includes reasoning, timestamps, links, and sources when they are present in the loaded conversation. |
| 🔒 | Private by default | No extension account, telemetry, ads, remote configuration, or third-party API. |
| 🍎 | macOS-native design | System materials, grouped lists, light and dark appearances, and accessibility settings. |
- An early page script inspects the active conversation response before the ChatGPT interface processes it.
- The page receives only the latest
Nvisible message groups. - The complete branch is kept temporarily in the tab's memory for export and discarded when you open another conversation.
- If ChatGPT embeds the conversation in its initial HTML, a reversible DOM fallback removes older messages from layout and paint without deleting their data.
Unexpected response formats are handled with a fail-open strategy: the extension leaves the response unchanged and does not prevent ChatGPT from loading.
- Download
ChatGPT-Tools-Safari.zipfrom the latest release and extract it. - Open Safari → Settings → Advanced and enable web developer features.
- Open Settings → Developer and enable Allow unsigned extensions.
- Choose Add Temporary Extension and select the extracted folder containing
manifest.json. - Enable ChatGPT Tools for Safari under Settings → Extensions.
- Open chatgpt.com and allow the extension to access the website.
Safari disables unsigned extensions when the app quits. Use Xcode for a permanent installation.
Install the full version of Xcode, launch it at least once, and accept its license agreement. Then run:
git clone https://github.com/galetaa/chat-gpt-tools.git
cd chat-gpt-tools
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
./package-safari.sh com.yourname.chatgpttools.safariOpen the generated project in SafariApp/, choose your Apple Development Team for both the app and extension targets, then build and run the container. You can also generate a project for one platform only:
./package-safari.sh com.yourname.chatgpttools.safari /path/to/output macos
./package-safari.sh com.yourname.chatgpttools.safari /path/to/output iosThe final argument accepts all, macos, or ios. The macOS extension has been tested manually; the iOS and iPadOS targets require separate testing and signing in Xcode.
- Select the extension button in the Safari toolbar.
- Enable Optimize long chats.
- Choose the number of messages with the slider or enter it directly.
- Enable Extended range to use values up to
100. - Reload an already open long conversation so early optimization can be applied to the complete loaded branch.
The compact indicator in the bottom-right corner shows how many messages are displayed and hidden. Disabling optimization restores messages hidden by the DOM fallback without losing their content.
Select Export Conversation in the main popup. The sidebar lets you:
- select every message, prompts only, or responses only;
- select individual messages and
Shiftranges; - include the title, conversation link, export date, timestamps, reasoning, and sources;
- save the conversation as
.md,.txt,.json, or.csv; - copy the generated output to the clipboard;
- prepare a PDF through Safari's standard system print dialog.
PDF output is generated locally. Choose Save as PDF in the macOS print dialog to save it.
The extension requests only:
storagefor local interface and export settings;- access to
https://chatgpt.com/*andhttps://chat.openai.com/*so it can operate inside the open ChatGPT tab.
Conversation content is never sent to the developer or a third-party service. Markdown, TXT, JSON, and CSV files are generated in the current tab. Temporary PDF job data is removed from local extension storage as soon as the print preview opens.
- The target version is Safari 18 or later.
- ChatGPT's internal conversation endpoint and DOM are not public APIs and may change.
- Optimization and complete export should be retested after major ChatGPT updates.
- Private Browsing and separate Safari profiles may require their own extension permissions.
Version 2.0.2 was tested on August 21, 2026 in an authenticated Safari session. With the status showing 10 shown / 2 hidden, the exporter still received all 12 original messages. Direct number entry, the 1–20 and 1–100 ranges, individual selection, and export options were also verified.
Automated verification requires Node.js 20 or later. The project has no external npm dependencies.
git clone https://github.com/galetaa/chat-gpt-tools.git
cd chat-gpt-tools
npm run verifyThis command validates the manifest, resource paths, CSP, and JavaScript syntax, then runs 25 tests covering optimization and export behavior.
Extension/
├── content/ # DOM optimization, status indicator, and exporter
├── icons/ # Safari icon set
├── popup/ # main extension popup
├── print/ # local PDF and print preview
└── scripts/ # page-world interceptor and trimming algorithm
Design/ # editable SVG icon source
tests/ # unit tests that do not require Safari
tools/ # static extension validation
Technical notes:
If a ChatGPT update changes the extension's behavior, open an issue and include your macOS, Safari, and extension versions.
Built for fast, long conversations — without compromising privacy.