AI agents are great at producing first-draft PDFs. They are terrible at iterating on them. You ask Claude for an invoice, get back a 600-line LaTeX document, compile it, and the title is two points too small. So you go back to the agent: "make the title a bit bigger." It rewrites the whole document. Now the table is also slightly different. So is the footer. The third compile lands fine but you have lost the surgical control you used to have when you were the one editing.
The fix is not a smarter prompt. It is a different surface for the iteration step: a browser editor that maps every click in the rendered PDF back to the exact line of LaTeX that produced it, and offers two ways to fix it without touching source.
That surface is Pressa Studio, and it is live today on Starter, Pro, and Business plans.
Click a Pixel, Find a Line
Open any compiled document in Studio and the page opens with the PDF on the left and a sidebar on the right. Click anywhere on the rendered page. The sidebar instantly shows the LaTeX line that produced what you clicked.
This is built on SyncTeX, a 20-year-old standard from the academic typesetting world. Every Pressa compile now writes a SyncTeX index alongside the PDF; the editor reads it and resolves clicks to source lines in under 50 milliseconds. No source map of your own to maintain. No re-compile to find where something is. Click, see the line, decide what to do.
Two Ways to Fix
Once the line is highlighted, the sidebar offers two paths.
Quick-fix toolbar. Seven deterministic buttons sit above the source pane: Bold, Italic, Bigger, Smaller, V-Space, Pad Left, Pad Right. Each one rewrites the current line in a precise, reversible way. Bold wraps the line in \\textbf{...} (or removes it if it is already bold). Bigger steps up to the next size class. Pad Right adds an \\hspace of one rem to the right side. One click, one recompile, new PDF. No prompt, no LLM, no waiting.
The seven helpers are intentionally narrow. They do not try to think. They do exactly what their name says, every time, and they are protected by an allowlist on the server so an attacker cannot smuggle a different rewrite past them by guessing helper names.
AI edit textarea. Below the toolbar is a text field where you describe the change in plain English. "Make this section red." "Add a horizontal rule above the table." "Convert this paragraph to a bulleted list." Submit, and Claude Sonnet 4.6 reads the locked line plus the surrounding context, returns a unified diff, the diff is applied server-side, the result is run through a 7-rule AI-edit security validator, and a fresh compile runs. The browser shows a compiling spinner; one second later you have a new PDF.
Because the AI sees only the locked line plus a small window of context, the edits stay surgical. The agent cannot accidentally rewrite the rest of the document. And because every AI edit goes through the same security validator that rejects shell-escape, file-system-write, and catcode-mutation primitives, the AI cannot smuggle dangerous LaTeX past the gate even if the prompt asks it to.
Quick-Fix vs AI Edit
The split exists because they solve different problems.
Quick-fix is for the ten things you do over and over: bold a heading, bump a font size, add a bit of vertical space. Buttons mean zero AI cost, zero round-trip latency, and a deterministic outcome you can rely on. Pressa charges you nothing extra for quick-fix beyond the underlying compile.
AI edit is for the long tail: anything you can describe in a sentence that has no helper button. Restyle a section. Rewrite a paragraph. Add a missing legend. Per-call cost is capped (Starter $0.05, Pro $0.10, Business $0.20) so a runaway prompt cannot drain your account. The endpoint is rate-limited to 20 edits per hour per API key with a monthly cap (Starter 20, Pro 200, Business 1000).
Template Authoring
Studio is also where you build reusable templates. Open any saved template in template mode and the toolbar swaps out for a placeholder picker. Click a spot in the rendered preview, name a placeholder, and the clicked text becomes {{ name }} in the source. The schema and sample data update automatically. Save, and every future render fills the placeholder with whatever value the caller passes in.
This turns the same Studio surface into both a one-off editor and a template author. The same SyncTeX click-to-source machinery powers both modes; the only difference is whether you are editing the LaTeX directly or marking a region as variable.
The Render API
Templates authored in Studio are served by a new endpoint:
$ curl -X POST https://api.pressa.dev/api/v2/templates/monthly-invoice/render \
-H "Authorization: Bearer pressa_..." \
-H "Content-Type: application/json" \
-d '{"data": {"client": "Acme", "amount": 4200}}'Same template, infinite renders. Schema-validated input, auto-escaped LaTeX, deterministic output. Built-in filters cover the boring cases: latex_escape (default), raw (opt out of escape), asset (look up an uploaded logo by name), currency (USD/EUR/GBP/JPY symbols + thousand separators), date (parse and format).
If a placeholder is missing, the API returns a 422 with the exact field path the caller left out. No silent renders with blank holes; no LaTeX-injection footguns when an LLM hallucinates a malformed value.
CLI and MCP Integration
The same render endpoint is exposed in two more places.
CLI. Run pressa render monthly-invoice --data data.json --output result.pdf from any terminal. Use - as the output to stream the PDF to stdout for piping. JSON-mode output for agent integrations is also available.
MCP. The Pressa MCP server adds a render tool alongside compile, save_template, list_templates, and the rest. Claude Code, Cursor, and any other MCP-aware agent can fill saved templates without re-uploading the LaTeX every call. Attach the server once, point your agent at a saved template name, and the agent fills it.
Technical Notes
Studio sessions are scoped to a single compile and expire after seven days of inactivity. The SyncTeX index is regenerated on every recompile; click-to-locate accuracy degrades gracefully on documents with no SyncTeX (a banner shows in the sidebar instead of guessing). Quick-fix uses optimistic locking so two parallel edits cannot clobber each other; AI edit runs async on a dedicated Sidekiq queue so a slow Claude call does not block the request thread.
The security gate is layered: Liquid auto-escapes every interpolation by default (a user-supplied \\write18 becomes the literal text \textbackslash{}write18); the template validator rejects 14 categories of dangerous LaTeX primitives before save; the compile sandbox runs with -no-shell-escape and a 60-second wall-clock timeout. Studio adds nothing to that surface; it just gives you a better way to drive it.
Try It
Studio is on by default for every Starter, Pro, and Business account. Compile any document via the API, CLI, or MCP and the response now carries a studio_url field. Open it in your browser and the editor loads. Or visit your dashboard to see your recent compiles and jump straight in.
Full reference for the V2 Render API, the seven quick-fix helpers, and the AI edit cost model is in the API documentation .