Find project-related ChatGPT conversations, review them in a desktop app, and move approved chats into a ChatGPT Project.
Project description
Project Chats
Project Chats is a local desktop tool that finds project-related ChatGPT conversations, helps you review them, and moves approved chats into a shared ChatGPT Project. It is designed for one-off ChatGPT Business/Team cleanup work where each user can only access their own chats — each person runs it on their own account, reviews the results, and ships the approved chats into a shared Project.
The GUI is the primary interface. A CLI is available for scripting.
Install
git clone https://github.com/michaeljeisner/project-chats.git
cd project-chats
python3 scripts/install.py
That creates a .venv in the repo, installs everything including Playwright, and writes ./project-chats-gui and ./project-chats launchers at the repo root. On macOS you can also double-click Project Chats.command after the script finishes.
Then launch the GUI:
./project-chats-gui
The GUI will offer to install browser automation (Playwright + Chromium) if it wasn't included, and the first run of Auto-Move will prompt you to sign into ChatGPT in the opened browser window.
PyPI release coming. Once the package is published you'll be able to install with
pipx install 'project-chats[browser]'and skip the clone.
What It Does
- Imports a ChatGPT export (
conversations.json), normalized JSON, Markdown, or text files. - Scores conversations against a project profile (name + terms).
- Lets you review high-confidence and possible matches in-app, with snippets.
- Generates project memory files from approved chats:
project_brief.mddecisions.mdrequirements.mdopen_questions.mdsource_chats.csv
- Generates
move_queue.htmlwith links and per-chat move instructions. - Optionally drives ChatGPT in a browser to move approved chats into the selected Project.
- Creates a handoff zip for teammates or a project coordinator.
What It Does Not Do
- Does not scrape workspace-wide chats — only what your account can see.
- Does not read browser cookies, passwords, or ChatGPT session storage.
- Does not use undocumented ChatGPT APIs.
- Does not use a ChatGPT Project API (OpenAI does not expose one). The optional
auto-movestep drives the visible ChatGPT UI in a browser.
Using the GUI
Launch:
project-chats-gui
The GUI walks you through four steps:
- New Project — name it and add terms (project names, aliases, people, repos, clients, domains, or any words that identify relevant chats).
- Import Chats — drop a
conversations.json, normalized JSON, Markdown, or text. Classification runs automatically. - Review — check the candidates, approve the right ones, hit Save & Continue.
- Move — open the move queue HTML for manual moving, or use Auto-Move to drive ChatGPT in a real browser.
The browser used by Auto-Move is a separate Playwright profile, not your everyday Chrome — sign into the ChatGPT account you want to use the first time. You can point at a different profile directory from Settings to use a different account.
Quick Start (CLI)
The CLI mirrors what the GUI does and is useful for scripting or headless runs:
project-chats init --project-name "Project Atlas" \
--term "Atlas" --term "launch" --term "fidelity"
project-chats ingest ~/Downloads/conversations.json --user-label michael
project-chats classify
project-chats build
project-chats bundle
This writes everything under ./project-chat-run/:
project-chat-run/outputs/review_queue.html
project-chat-run/outputs/move_queue.html
Edit project-chat-run/outputs/review_queue.csv and set approved=true only for chats you want moved, then rerun project-chats build. The GUI does this in-app.
To move approved chats automatically through the ChatGPT UI:
project-chats auto-move
The first run opens a real browser profile at project-chat-run/browser-profile. Sign into ChatGPT there when prompted. The command writes project-chat-run/outputs/move_log.csv.
To use a specific browser profile/account from the CLI:
project-chats auto-move --user-data-dir ./profiles/alice
Multi-User Workflow
-
Project coordinator creates a profile:
project-chats init --project-name "Shared Project" --term "client" --term "repo-name"
-
Send
project-chat-run/project_profile.jsonto each participant. -
Each participant runs the same workflow on their own account.
-
Each participant reviews and either uses the move queue HTML manually or runs
project-chats auto-movewhile signed in. -
Participants send the generated zip to the coordinator if a consolidated memory pack is needed.
Inputs
ChatGPT Export
Personal ChatGPT exports include conversations.json. ChatGPT Business may not expose the same export flow, so this format is supported when available but not required.
Normalized JSON
[
{
"user_label": "alice",
"conversation_id": "abc123",
"title": "Migration notes",
"url": "https://chatgpt.com/c/abc123",
"messages": [
{"author": "user", "text": "Project Atlas rollout plan..."},
{"author": "assistant", "text": "Decision: use staged rollout..."}
]
}
]
Markdown/Text
Markdown and text files are ingested as one chat per file. The file name becomes the chat title.
Safety
Only run this on chats you are authorized to process. Review the generated files before uploading them into a ChatGPT Project or sharing them with teammates.
The auto-move command is best-effort UI automation. ChatGPT can change labels or menus without notice, so run project-chats auto-move --dry-run first, then use --limit 1 for a supervised first move.
Hack on It
The install above already gives you an editable checkout. To run the tests:
python3 -m unittest discover -s tests
If you want to reinstall from scratch (e.g. after pulling changes):
python3 scripts/install.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file project_chats-0.2.0.tar.gz.
File metadata
- Download URL: project_chats-0.2.0.tar.gz
- Upload date:
- Size: 28.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cdc992652f0bae9652b47e3c225df79c4bd34c0c8e423dce90773f9fa3451a9
|
|
| MD5 |
44d02448d514f874e24bb84a269df66a
|
|
| BLAKE2b-256 |
345e701310cde3a11f49a76cfd39c80909b45d970cb39868de8033ef28b58110
|
File details
Details for the file project_chats-0.2.0-py3-none-any.whl.
File metadata
- Download URL: project_chats-0.2.0-py3-none-any.whl
- Upload date:
- Size: 25.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d968fffbd527c2b441caefd87015050a9d53bb7da7ec0af855749a4131cc918
|
|
| MD5 |
5f733457575de4135e574a4484250bfd
|
|
| BLAKE2b-256 |
39475edc2d9791959b1077eb1259f53cc580ec1c2442d3310d06b6c711e0f274
|