# An agent that edits your paper, gated five ways, with no docs and no tests shipped

> PaperFit treats LaTeX typesetting as a closed visual loop: compile, render pages to images, diagnose, patch source, recompile and gate. It installs into three agent hosts from npm, ships two agent-role directories, documents five taxonomy categories, and passes nothing but a syntax check on one file in its verify step.

**OpenRaiser/PaperFit** — 📄 [Skill] Vision-in-the-loop LaTeX typesetting agent — auto-compile, render, diagnose, and fix paper layouts

- Repository: https://github.com/OpenRaiser/PaperFit
- Website: https://openraiser.github.io/PaperFit/
- Stars: 336 · Forks: 20
- Language: TeX
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/openraiser-paperfit

## Two agent-role directories ship, one with a dot and one without

The top level of the repository contains both a dot-prefixed agents directory and a plain one. The manifest's file list includes both, so a global install puts two directories of role definitions on disk. The architecture table explains one of them: role descriptions for scheduling, visual diagnosis, rule checking, source repair, semantic tuning and the quality gate. The other is not described anywhere in the document, and the simplified directory tree in the same section lists only the plain one. Two directories with nearly identical names and different contents is the kind of thing that works until a contributor edits the wrong one, and the packaging makes both reachable from an installed copy rather than only from the repository.

## Verify checks the syntax of one file and hardcodes the virtual environment path

There is one verification command and it chains three checks. The first runs a configuration validator. The second runs the Node syntax checker against the entry point, one file, out of an entry directory plus a scripts directory. The third runs a Python warnings checker with warnings promoted to errors. Both Python invocations call an interpreter at a hardcoded relative path inside a directory named for the virtual environment, so the whole chain only runs if you created your environment exactly where the script expects it. There is also a separate script for runtime benchmark evidence and no test directory in the repository at all. For a project whose central claim is that visual inspection gates delivery, the automated gate is a configuration check and a lint pass.

## The npm package ships no docs and no protocols, and the readme points at both

The file list in the manifest has fifteen entries: the two binary directories, both agent directories, the skills, plugins and configuration directories, the two Claude dot-directories, the install script, the requirements file and four documentation files at the root. The docs directory and the protocols directory are not on it. Yet the readme sends you to the provider setup guide for one host, to the commands guide, to the release and local update guide, and to the content integrity protection protocol. A global install therefore resolves none of those four links, and the integrity protocol in particular is the document that explains the rules the tool claims never to break. Everything a user needs in order to understand the safety model is in the one directory that did not ship.

## A global install brings three terminal libraries and no Python, and the readme calls the second step optional

```bash
npm install -g paperfit-cli
paperfit-install --target claude
```

The documented flow is those two commands, then a health check, then a pip install whose path is derived from the global npm root. The line introducing them recommends running the health check once and installing the Python dependencies. Meanwhile the environment requirements list a PDF information tool, an image conversion library, a native PDF geometry library, a headless vision library and a schema validation library, none of which npm can install. There is a postinstall script defined in the manifest and the readme still asks you to do the work by hand. So the only supported install path leaves a required half of the stack to a manual command, and the sentence recommending it reads like an optional extra.

## Five conditions must pass before a second repair round, and one round is the default

Source modification is the one thing the system does not do on its own, and the paragraph describing it is the most carefully worded in the file. Analysis, rendering, diagnosis and repair planning may all run automatically. Anything that changes source is a dry run unless an explicit apply flag or an equivalent authorisation from the host is present. The default round count is one. A second round needs the apply flag and an explicit round count supplied together, and even then only after four named conditions pass: approval carried forward from the previous round, artifacts still fresh, a candidate approval gate, and a continuation signal from the gatekeeper. Five separate things must go right before the tool edits your paper twice. That is a deliberately conservative design, and it is the opposite of how most agent loops behave.

## The recorded language is a typesetting language and the repository holds none

The primary language recorded for this repository is the language LaTeX papers are written in. The default branch contains no paper, no bibliography file and no example document. What it contains is a Node package, a Python requirements file, two agent directories, skill documents, configuration and scripts. The detection is almost certainly coming from snippets inside the configuration or inside the instruction documents rather than from anything compilable. The practical consequence is that the readme's worked examples are the only cases in the tree, and the two demo files are the only before-and-after evidence a user ever sees.

## Two effect demos are bare links to PDFs with no preview

The section presenting real repair results contains two centred paragraphs. Each wraps a single link to a PDF in an images directory, and each anchor has an empty body, so what renders is two unlabelled file links. There is no thumbnail, no before-and-after pair, no caption, and no sentence describing which defect was fixed or what the page count went from and to. The section title claims real results from real repairs and the section delivers two filenames. Given that the project's argument is entirely visual, that the comparison to doing it by hand is a table about page images, and that the gate exists to look at rendered pages, the evidence is the part of the documentation that carries the least information.

## Every Python requirement names the code path it serves, and one reveals a sub-class the readme omits

The requirements file carries a trailing comment on every line, and the comments name specific files and specific jobs. A YAML library is there because a configuration wizard reads two YAML files. A headless vision library is there to project ink along rows so one detector can find voids inside a column, and the comment labels that detector with a code that ends in a dot five, a sub-class of taxonomy category A. A geometry library handles figure and table overflow checks. A validation library checks state. One entry is marked optional and says exactly what happens without it, which is that the wizard falls back to a numeric menu. That is the most traceable dependency documentation around, and it quietly reveals that the five-category taxonomy in the readme has finer numbering underneath it.

## Conclusion

PaperFit is worth trying if you are submitting to a conference and suspect your layout is the problem rather than your argument, because the loop it runs is the one a human does anyway, and the thing that makes it safe is that source edits are a dry run unless you ask for them twice over. It is not the tool for shrinking a paper, since its own protection rules forbid the fastest way to do that and its page-count feature prefers layout-level changes first. Before you install, note that a global install brings three terminal libraries and no Python packages, so you have a second manual step the readme frames as merely recommended, and that the integrity protocol and the provider guides it links to are not in the package you will have installed. Run the health check first and check which LaTeX toolchain your template actually needs.

## FAQ

### What does PaperFit need installed besides the npm package?

Node 18 or newer, Python 3.8 or newer, a PDF information and page rendering tool installed on the machine, and a LaTeX toolchain such as a single-binary engine or the classic one. The Python packages are a separate pip install against the global npm root, which the readme recommends rather than requires.

### Will PaperFit edit my LaTeX source automatically?

No. Analysis, rendering, diagnosis and planning run on their own, but anything that changes source is a dry run unless you pass an explicit apply flag or the host supplies an equivalent authorisation. The default round count is one, and a second round needs both flags together plus four named conditions to pass.

### What are the five defect categories PaperFit uses?

Space usage, covering orphan lines, widow lines, last-page whitespace and column imbalance; floats, covering position, size, stacking and spanning; consistency across tables, figures, captions and spacing; overflow and alignment, covering overfull lines, formula breaks and objects past the margin; and template migration, covering column changes, package compatibility and conference rule differences.

### Can PaperFit shrink my paper to a page budget?

Yes, with layout-level adjustments preferred first and only minimal, auditable semantic edits when those are not enough. Its content protection rules forbid silently deleting figures, tables, captions, labels or citations, and forbid using box-scaling macros as the default way to compress a table.

### Which agent hosts does PaperFit install into?

Three. The installer takes a target argument for a Claude-style host, for a second host that needs its own provider setup guide, for a third host with an optional project path, or for all of them. There is also a plugin marketplace route and a source install script.

## Sources

- [Issues](https://github.com/OpenRaiser/PaperFit/issues)
- [License: MIT](https://github.com/OpenRaiser/PaperFit/blob/main/LICENSE)
- [OpenRaiser/PaperFit on GitHub](https://github.com/OpenRaiser/PaperFit)
- [Project website](https://openraiser.github.io/PaperFit/)
- [README](https://github.com/OpenRaiser/PaperFit/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/openraiser-paperfit
