Settings

Theme

Show HN: Filling PDF forms with AI using client-side tool calling

copilot.simplepdf.com

48 points by nip 14 hours ago · 28 comments · 3 min read

Reader

Hey HN!

I built SimplePDF Copilot: an AI assistant that can interact with the PDF editor. It fills fields, answers questions, focuses on a specific field, adds fields, deletes pages, and so on.

It's built on top of SimplePDF that I started 7 years ago, pioneering privacy-respecting client-side pdf editing, now used monthly by 200k+ people.

As for the privacy model: the PDF itself never leaves the browser. Parsing, rendering, and field detection all run client-side.

The text the model needs (and your messages) goes to whatever LLM you point at. By default that's our demo proxy (DeepSeek V4 Flash, rate-capped), but you can BYOK and point it at any cloud provider, or go fully local (I've been testing with LM Studio).

Unlike the existing "Chat with PDF" tools that only retrieve the text/OCR layer, Copilot can act on the PDF: filling fields, adding fields (detected client-side using CommonForms by Joe Barrow [1], jbarrow on HN with some post-processing heuristics I added on top), focusing on fields, deleting pages, and so on.

I built this because SimplePDF is mostly used by healthcare customers where document privacy is paramount, and I wanted an AI experience that didn't require shipping PII to a third party. Stack is pretty standard:

- Tanstack Start

- AI SDK from Vercel

- Tailwind (I personally prefer CSS modules, I'm old-school but the goal since I open source it, I figured that Tailwind would be a better fit)

The more interesting part is the client-side tool calling: events are passed back and forth via iframe postMessage.

If you're not familiar with "tool calling" and "client-side tool calling", a quick primer:

Tool calling is what LLMs use to take actions. When Claude runs grep or ls, or hits an MCP server, those are tool calls.

Client-side tool calling means the intent to call a tool comes from the LLM, but the execution happens in the browser.

That matters for: speed, you can't go faster than client-to-client operations and also gives you the ability to limit the data you expose to the LLM. For the demo I do feed the content of the document to the LLM, but that connection could be severed as simply as removing the tool that exposes the content data.

The demo is fully open source, available on Github [2] and the demo is the same as the link of this post [3]

What's not open source is SimplePDF itself (loaded as the iframe).

I could talk on and on about this, let me know if you have any questions, anything goes!

[1] https://github.com/jbarrow/commonforms

[2] https://github.com/SimplePDF/simplepdf-embed/tree/main/copil...

[3] https://copilot.simplepdf.com/?share=a7d00ad073c75a75d493228...

iamflimflam1 13 hours ago

Might be worth making it clearer that the chat messages are going to a remote server. So any PII data is leaving the local machine.

  • nipOP 13 hours ago

    I tried to make it clear with the popup message that appears when you start chatting: "Public demo. Use sample data only. Messages are processed by the selected AI provider."

    But you're right that it's not as evident as I wanted to, I'm making a small copy update to make it clearer: "Public demo. Your chat messages leave your device and are sent to the selected AI provider. Use sample data only."

    (Since there's support for local models, the popup is only displayed when NOT using your own model)

    Thanks!

    EDIT: the copy update is live, thanks again!

    • whattheheckheck 4 hours ago

      Embed a small llm with wasm so it's all private. Maybe make an api so when the os has a local llm it will use that eventually

nipOP 14 hours ago

Just to be clear, this is a technical demo showing what's possible with client-side tool calling + local models: LLM-assisted form filling where no document data has to leave the user's machine.

Use cases range from:

- Filling foreign-language forms

- Navigating a contract before signing: "can I trust ALL the clauses here?"

- Pre-filling repetitive forms from existing data sources (CRM, EHR, etc. via MCP/RAG)

Copilot is designed to be embedded; our customers ship it white-labeled inside their own products.

kassenov 6 hours ago

Do you think this will work with Chrome's built-in AI [1]? [1] https://developer.chrome.com/docs/ai/built-in

  • nipOP 5 hours ago

    It already does! More specifically, SimplePDF supports "WebMCP": the tools that the LLM is using are exposed as WebMCP tools

s09dfhks 5 hours ago

I managed to do this locally with Claude and some python libraries. Claude looked over the PDF, found the fields, and wrote a python script to insert data at the appropriate locations. Sure it took some futzing to get everything to line up properly, but as other's have said, my PDF wasn't sent to a remote server

grassfedgeek 9 hours ago

In the chat box I typed my SSN is "123-45-6789". It filled it in in the wrong box (4 Exemptions).

What problem is this solving? Isn't it easy enough to just click in the correct box and type the values?

How does this compare to Claude Cowork?

nilirl 11 hours ago

One thing I've struggled with before is building a collection of data models based off of a collection of PDF forms.

I wanted to abstract away the PDF form building my own html form on top of a data model that can later be used to programmatically fill the PDF .

Since I had 100s of PDFs, I wanted an OCR+LLM pipeline to build a data model for each PDF. Unfortunately, OCR + LLM works ~90% of the time but sometimes fields are missed or mislabeled in the data model.

Does this sometimes get it wrong during programmatic filling? How do you deal with that?

BloondAndDoom 9 hours ago

This looks interesting, I’m looking for a good personal PDF editor that I can use in windows and private.

Seems like your product is more for organizations, any idea if such a thing exists. It seems like the market is full of bloated (Adobe/foxit) or not properly working editors.

  • nipOP 8 hours ago

    We offer both:

    - A privacy-focused PDF editor, free for individuals, used by 200k users monthly: https://simplepdf.com/editor

    - The same editor, embeddable into one’s app for companies, with the same privacy guarantees (everything happens in the browser) + the resulting PDF is stored in their own storage (« bring your own storage »).

    The majority of our paid customers are in healthcare where privacy is non-negotiable. Co-pilot extends that to the AI world (« bring your own AI »)

    What are you using the PDF editor for?

    • trollbridge 6 hours ago

      I hope this doesn't sound insulting but how is this different than Preview or Adobe Acrobat?

      • nipOP 5 hours ago

        Absolutely not insulting! In fact an excellent question!

        Preview was an inspiration when I started SimplePDF, my goal was to make the "Preview" of the web, so that people without a Mac would benefit from a software matching Preview in ease of use and overall polish.

        Adobe Acrobat: SimplePDF has "Simple" in the name as the philosophy is to keep it simple (both in ease of use, and features): I don't intend to support everything that Adobe Acrobat does. There's a lot of features that I could build that I intentionally do not, as they would bloat the UI and hard the overall usability. Most people have very simple needs and don't need advanced features (like scripting, etc).

tyingq 11 hours ago

It is cool, but the demo is flawed, right at the second field:

  What's the business name/disregarded entity name, if different from above (line 2)?
As far as I can tell, no way to skip this, leave it empty, not even "use a space". And that field would be empty for many or most.
  • nipOP 11 hours ago

    Have you tried telling the LLM to just skip the field and move to the next one?

    I tried with various: "Skip it", "None, leave blank", "Skip this field" and all worked for me, but if may very well be missing something very obvious?

    • tyingq 11 hours ago

      That would have occured to me if it were free-form chat, but it's guided and telling me to input the value, not a chat response. Unable to try, third round hits the demo limit.

grahammccain 13 hours ago

Keep going though. I’m definitely looking for something like this once we can get something secure we can use with proprietary and pii data.

simianwords 12 hours ago

It looks cool but, how is this different from me uploading to chatgpt and asking it to fill in?

kiney 12 hours ago

Does it support XFA forms?

  • nipOP 11 hours ago

    Hey Kiney!

    It supports AcroForms (like in the example) but not XFA.

    Why are you asking? gov forms support?

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection