latex-compile — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited latex-compile (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Compile a LaTeX document, fix all errors and all aesthetic issues so the PDF is clean and the log is empty — without ever altering content to make things fit.
After any edit to a .tex file. Also invoke before committing.
The user may specify one or more files: /latex-compile brief.tex workbook.tex. Default: workbook.tex. Work from the project root (wherever CLAUDE.md lives).
Critical: never trust the `.log` for warnings. When latexmk decides targets are up-to-date it skips compilation and leaves a stale log that under-reports (or zeroes out) overfull warnings. Force a real pdflatex pass and capture its stdout:
pdflatex -interaction=nonstopmode <file> > /tmp/tex.txt 2>&1Run twice when cross-references, TOC, or forward \refs changed (or a manual \label bibliography needs a second pass to resolve \cite).
Always use `grep -a`. pdflatex embeds binary font-path bytes in its output, so plain grep treats the stream as binary and matches nothing. Every grep below uses -a.
grep -anE "^! |LaTeX Error|Undefined|Overfull|Underfull|multiply defined|Font (shape|Warning)|File .*not found" /tmp/tex.txt| Category | Marker | Threshold to fix |
|---|---|---|
| Fatal errors | ! , LaTeX Error, Runaway argument, Emergency stop | Always |
| Undefined refs/cites | Reference … undefined, Citation … undefined | Always (or note if intentional forward ref) |
| Overfull hbox | Overfull \hbox … too wide by Xpt | Fix if X > 5pt (see triage) |
| Underfull hbox | Underfull \hbox … badness N | Fix if N ≥ 1000 |
| Over/underfull vbox | Overfull \vbox, Underfull \vbox … badness N | vbox: always; underfull vbox: N ≥ 10000 |
| Font warnings | Font shape … not found, LaTeX Font Warning | Fix (but see the harmless cases in §6) |
| Missing packages | File … not found | Always |
| Multiply-defined labels | multiply defined | Always |
The ! … line and the l.<N> line below it locate the fault.
\newcommand spelling\DeclareRobustCommand or \texorpdfstring
\usepackage or report the missing dependencyRecompile and repeat until the fatal grep is empty.
\ref) → it can never resolve.Replace \ref{label} with the section/theorem title as literal text — e.g. `\S\,Title of that section''. Never leave a dangling \ref that prints ??`.
Overfulls come in three flavors: in paragraph at lines N--M, in alignment at lines N--M, and detected at line N (math/box mode — the wide row is a line or two above N).
Triage by overrun magnitude:
\hfuzz=1pt / \emergencystretch=3em inthe preamble absorbs these silently
Hard rule: do not change mathematical content, wording, table data, or abbreviate headers to make things fit. Fix overflow only by changing layout:
\[ … \] display=, \le, \to).In align, end the line with \notag\\ then &\quad continuation. Keep the `\label` and number — \notag goes only on continuation lines, never the labelled one
\boxed{\begin{aligned} … \end{aligned}}align lines, or wrap the whole display in {\small … }
\small / \footnotesize / \resizebox{\textwidth}{!}{…} —do NOT abbreviate headers or cells
\begin{sloppypar}…\end{sloppypar}; or split a long unbreakable\texttt/\code token across two \code{…} units at a natural boundary; or set multi-line code as a verbatim / \begin{quote}\small\ttfamily\raggedright … \end{quote} block (raggedright avoids the new overfull but yields harmless underfulls)
\allowbreak at a factor boundary, or promote to displayragged/centred context it's expected — suppress locally with \hbadness=1000 only if unavoidable. (Beware: \emergencystretch can turn a sub-\hfuzz overfull into a noisy underfull — prefer fixing the overfull or leaving it under \hfuzz.)
\widowpenalty=10000 \clubpenalty=10000 in the preamble; for onecase, \needspace{3\baselineskip} or a manual break before the paragraph.
align, every row needs the same number of &; remove blank linesinside align (spurious gap) and a stray trailing \\ on the last row.
OT1 warnings: ensure \usepackage[T1]{fontenc}. Use \bfseries/\itshape,not \bf/\it. Harmless: \code{}/\texttt inside a bold section title falls back to medium typewriter (CM has no bold tt) — a Font Info, not a warning; leave it.
\, before units / between adjacent integrals; \ldots/\dotsnot ...; `` …'' ` not "…"; e.g.\ /cf.\ ` to avoid double sentence-spacing.
\section/\subsection title makes hyperref choke building the PDFbookmark — Token not allowed in a PDF string (harmless) or Illegal parameter number in \Hy@… (a real error, from a multi-arg macro like a smallmatrix-bracket in the title). Wrap the title: \section{\texorpdfstring{<TeX with macros>}{plain-text bookmark}}.
pdflatex+inputenc needs\DeclareUnicodeCharacter{03C9}{\ensuremath{\omega}} (and {03C0}{…\pi} etc.) in the preamble, or it errors with Unicode character … not set up for use with LaTeX. In a verbatim block prefer ASCII (Pi, names) — declarations don't fully apply there.
Recompile with pdflatex (same > /tmp/tex.txt capture), re-run the §2 grep on the fresh stdout, and confirm: no ! errors, targeted overfulls gone or < 5pt, no new issues, refs/cites resolved.
Compiled <file>: N pages.
Errors fixed: <list or "none">
Aesthetic fixes: <list with the layout rule used, or "none">
Remaining warnings: <list or "none — log is clean">If a warning is genuinely unavoidable, say so and explain why it is harmless.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.