Browse and search your Cursor AI chat histories locally, including tool calls
Project description
cursor-viewer
A local browser UI for reading through your Cursor AI chat histories — including tool calls, search, and support for exploring backups.
Built with Streamlit. No server, no account, no data leaving your machine.
What it does
- Lists all your Cursor chats grouped by project
- Renders tool calls (file reads, terminal commands, etc.) inline as collapsible sections
- Lets you search across projects and message content
- Supports pointing at a backup of your
.cursordata directory, not just the live one
Install
Requires Python 3.10+. First, get pipx if you don't have it:
macOS
brew install pipx
pipx ensurepath
Linux
sudo apt install pipx # Debian/Ubuntu
pipx ensurepath
Windows
scoop install pipx # or: pip install --user pipx
pipx ensurepath
Then install cursor-viewer:
pipx install cursor-viewer
Then just run:
cursor-viewer
It opens in your browser at http://localhost:8501.
Configuration
The app figures out where your Cursor data lives automatically. If you want to override that:
One-off (flag):
cursor-viewer --cursor-path "/Volumes/Backup/Library/Application Support/Cursor"
Session (env var):
CURSOR_DATA_PATH="/path/to/cursor" cursor-viewer
Persistent default (UI):
Open the Settings panel in the sidebar, enter your path, and hit "Save as default". That writes to ~/.cursor-viewer/config.json and sticks across restarts.
Priority order: flag > env var > saved config > auto-detected default.
Other options
cursor-viewer --help
--cursor-path PATH path to Cursor's data directory
--port PORT port to run on (default: 8501)
Running from source
git clone https://github.com/sahilsasane/cursor-viewer
cd cursor-viewer
uv sync
uv run streamlit run streamlit_app.py
How Cursor stores chats
Cursor keeps chat history in SQLite databases under its data directory:
User/globalStorage/state.vscdb— composer/agent chatsUser/workspaceStorage/<id>/state.vscdb— per-workspace chats and metadata
cursor-viewer reads these directly, read-only, without touching any Cursor internals.
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 cursor_viewer-0.1.0.tar.gz.
File metadata
- Download URL: cursor_viewer-0.1.0.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f8a096165764a58273562046c2c57a979738bad56430f1c4aa074d742ffa39d
|
|
| MD5 |
cf5b5cf88ef0e32bb7cb56030f18c361
|
|
| BLAKE2b-256 |
353e2e4af055a0ef541793352f4935fdd5354f043cc2e344231760c79f25b43b
|
File details
Details for the file cursor_viewer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cursor_viewer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71f5af2cd8785cf63b953269e6ac91ac317b579dfbb9e8cc1405a28461d2b255
|
|
| MD5 |
7c2ff623350762c6cfdd44dbb2db9a1a
|
|
| BLAKE2b-256 |
75608109cd49e9eaba6705d6c1ed8ad4ba01f1b8f5deecc69e8d3bfdf3ed4f04
|