A lightweight macOS PDF reader with an integrated LLM chat panel. Select text in a paper, invoke an LLM, and keep model-specific chat sessions alongside the document.
- Open and read local PDFs with PDFKit
- Select text and invoke an LLM from a context menu
- Split-view layout: PDF on the left, chat on the right
- Note renderer: render notes as markdown on the right (WIP)
LLMPaperReadingHelper
├── src/
│ └── macos/ # macOS SwiftUI app
│ ├── app-shell.swift
│ ├── chat-panel.swift
│ ├── llm-client.swift
│ ├── llm/
│ │ ├── claude-client.swift
│ │ └── openai-client.swift
│ ├── pdf-viewer.swift
│ └── session-store.swift
├── docs/ # Component docs
├── resource/ # App resources (icon)
├── dist/ # Build artifacts
├── Makefile
└── Package.swift- macOS
- Xcode with Swift toolchain
- Swift Package Manager (included with Xcode)
git clone <your-repo-url>
cd LLMPaperReadingHelper
make devmake dev # Run the macOS app via SwiftPMmake build # Build the macOS app
make release # Build a release .app bundle in dist/make package # Build and zip a release bundle in dist/The output zip is placed in dist/LLMPaperReadingHelper.zip.
make clean # Remove build artifacts and dist bundle- API keys are entered in the app UI and stored locally in the Keychain.
- Each model family maintains its own session list and chat history.
- Supported model families: OpenAI, Claude, Gemini.
Apache-2.0 License - see the LICENSE file for details.