Yesterday a clever build shipped. The twist: it treats your codebase like a document, not a folder.
GoblinMD is a free, offline Python desktop app that compiles code repos and PDFs into a single Markdown file, ready to paste into any LLM. No cloud. No subscription. Built by a developer who got tired of copy-pasting files one by one into ChatGPT.
Here is what makes it different from just zipping files
Skeleton Mode collapses function and class bodies. The LLM sees the full structure of your codebase without reading every implementation detail. Fewer tokens. Sharper context. That is the real value.
Git Diff Filter is the other standout. Instead of packing the whole repo, you pack only the changed files: staged, unstaged, or untracked. You send the LLM exactly what changed in this session. Nothing more.
PDF parsing goes deeper than text extraction. Diagrams and charts get pulled out to a local folder, and the Markdown gets [IMAGE: path] tokens injected inline. Drag those into your chat window and the visual context follows.
Here is a quick workflow
- 📁 Open GoblinMD, point it at your repo or PDF
- ✂️ Enable Skeleton Mode to collapse implementation noise
- 🔍 Toggle Git Diff Filter to pack only what changed
- 📋 Check the live token count and cost estimate before you copy
- Paste the single Markdown block into your LLM of choice
Pro tip: use Block Reordering to put your most important context at the top. LLMs weight early tokens heavier. Structure your prompt like a brief, not a dump.
Second tip: the Live File Watcher syncs with VS Code in real time. Edit a file, save it, the Markdown updates automatically. No need to repack.
License is custom non-commercial. Fork it, modify it, keep it free.
Frequently Asked Questions
Q: How does the Git diff filter save time?
Instead of manually checking which files changed before pasting into Claude, the Git diff filter automatically includes only staged, unstaged, or untracked changes. You skip the manual tracking step and keep your prompt focused on actual changes.
Q: When should I actually use skeleton mode?
It’s perfect for architecture reviews or refactoring discussions where you need the LLM to understand your code structure but not read every implementation detail. You save tokens and context space while keeping the insight the model actually needs.
Q: What makes the PDF feature special?
The app automatically extracts diagrams and charts from PDFs into a local folder and marks them as [IMAGE: path] tokens in your markdown. You can drag the visuals straight into your LLM chat alongside the text, most tools only handle text, so this is a real standout for technical docs.
Q: How do I prioritize which files the LLM should focus on?
The drag-and-drop card view lets you reorder files to signal priority through positioning. One user suggested adding explicit “anchor context” vs “reference only” annotations so the model could weight them differently, a handy feature that could come in a future update.
my friend built GoblinMD : an offline desktop app to pack code & PDFs into prompts for LLMs (open source, built in Python & PyQt5)
by u/mxsus in PromptEngineering