Revising a LaTeX manuscript means going back and forth between the PDF and the source. A reviewer sees the problem on the page; whoever edits has to find the same spot in the .tex files. Limn closes that loop for people and agents alike: point at the spot in the PDF, and the note lands on the source line it came from.

How it works
Drag over a spot in the PDF and write what should change. Limn turns it into a pin: the .tex file and line range — recovered with SyncTeX and cross-checked against the text — plus your note.
People and agents, one loop
Agents read the pins as a short work list (pins.md, about 35 tokens per pin instead of a 1,500-token screenshot), edit the source, and close each pin with what they changed. A person confirms — or replies with what is wrong, which sends the pin back. Co-authors on the same private network pin too, and every pin records who left it.
- A single Python server with no dependencies beyond the standard library, and a browser viewer that renders the PDF as vectors (bundled PDF.js)
- Several documents per manuscript as tabs — manuscript, response letter, view-only reviewer PDFs, figure documents
- Figure documents: for figures drawn by code, a drag names the element and the script lines that drew it
- Rebuilds on demand or when the upstream branch moves (
--git-pull) - Threads, questions, @mentions, assignees, review before done, and a diff view per pin
- One long-running instance per manuscript as a systemd user unit, shared with
tailscale serve
Getting started
Requires Python 3.10+, uv, a TeX distribution with SyncTeX (latexmk/pdflatex) and Poppler (pdftoppm, pdfinfo).
uv tool install git+https://github.com/dartworklabs/limn@v0.4.22
limn version To review on your own machine, start one server with local authentication and open http://127.0.0.1:18300/:
limn serve --manuscript ~/papers/paper2 --main main.tex --port 18300 --auth local Never expose Limn without an identity provider in front of it. Collaboration over a tailnet, instances, the agent procedure and the security model are covered in the README and SECURITY.md.
License
AGPL-3.0-only. Commercial licenses are available from Dartwork.