
TL;DR
A Show HN PDF form demo points at a bigger architecture shift: keep sensitive documents local, expose narrow browser tools to the model, and make AI assistance inspectable.
The most interesting AI app on Hacker News today was not another coding agent. It was a small PDF demo.
SimplePDF showed a browser-based form filler using client-side tool calling. The pitch was simple: an assistant can help fill a document while the document itself stays on the user's machine.
That sounds narrow, but the pattern is bigger than PDFs.
Most AI apps still use the same architecture: upload sensitive data to a server, call a model, return the answer. That is easy to build and hard to trust. Client-side tool calling flips the shape. The model gets a narrow set of actions it can request. The browser owns the document, the DOM, the form fields, and the final write.
For developers building AI into products with private data, that is the direction worth studying.
The HN thread around the demo had exactly the right skepticism.
The author described it as a technical demo for LLM-assisted form filling where document data does not have to leave the user's machine. They pointed to use cases like foreign-language forms, contract navigation, and pre-filling repetitive documents from systems such as CRMs or EHRs.
The first serious pushback was also obvious: if chat messages go to a remote server, then personally identifiable information may still leave the machine.
That is the core design constraint. "Client-side" is not a magic privacy label. You have to specify what stays local, what is sent to a model, what tools the model can call, and what logs are retained.
Done casually, this is just upload-to-AI with extra steps.
Done carefully, it is a useful architecture.
In a normal tool-calling app, the model asks the server to execute a function:
model -> server tool -> database or API -> model -> user
In a client-side tool-calling app, the model asks the browser to execute a constrained action:
model -> browser tool -> local document state -> browser writes result
The browser can expose tools like:
The important part is scope. The tool should not be "send the whole document to the model." The tool should be "return the labels for visible empty fields" or "fill field 12 with this value after user approval."
That narrower API is the privacy boundary.
Get the weekly deep dive
Tutorials on Claude Code, AI agents, and dev tools - delivered free every week.
AI assistants are moving into workflows that contain sensitive state:
These are exactly the places where users want help and exactly the places where teams cannot casually upload everything to a third-party model.
Client-side tool calling gives product teams a middle path:
This is not only a privacy win. It is a product win. Users trust AI more when they can see what it is touching.
If I were building this pattern into a real product, I would start with seven rules.
Do not put the full document in the chat transcript unless the user explicitly asks for it. The browser should own document state. The model should receive minimal summaries or targeted snippets.
Bad:
getDocument()
Better:
getVisibleFieldLabels()
getSelectedParagraph()
fillField({ fieldId, value })
Narrow tools reduce accidental data exposure and make model behavior easier to audit.
The assistant can propose values. The user approves the write. This is especially important for legal, financial, medical, and identity forms.
Show the user what happened:
This makes the assistant feel less like a black box and more like a controlled helper.
If the model is remote, redact aggressively:
For some workflows, route only schema and labels to the model, then map user-provided values locally.
Local models are not always strong enough for complex reasoning, but they are often good enough for extraction, classification, translation, and repetitive form assistance. Use local inference where the task allows it.
Documents can contain adversarial text. A contract clause could tell the model to ignore instructions. A PDF can include hidden text. Tool calling does not remove prompt-injection risk. It gives you a smaller surface to defend.
Do not copy the PDF demo as a product category. Copy the boundary.
The browser is not just a thin UI over a server-side model. It can be the execution environment for AI tools. It has access to local state, user gestures, form fields, canvas data, files, and permissions. Used carefully, that makes it a safer place to execute sensitive actions.
This is the same lesson showing up across agent tooling: the model should not own everything. Give it bounded tools, inspectable actions, and deterministic rails.
For PDF forms, that means "suggest and fill this field."
For developer tools, it might mean "stage these files, but do not commit."
For internal dashboards, it might mean "draft this record update, then wait for approval."
The pattern is portable.
Client-side tool calling is not a silver bullet for AI privacy. It is a better primitive.
The future of AI apps with private data probably looks less like "upload the whole file to a chatbot" and more like this:
That is a better contract between the user, the application, and the model.
The HN skepticism is the useful part. It forces the architecture to be precise. If chat still leaks PII, say so. If the document stays local, prove it. If the model can write fields, show every write.
Trustworthy AI UX starts with boundaries users can understand.
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
The TypeScript toolkit for building AI apps. Unified API across OpenAI, Anthropic, Google. Streaming, tool calling, stru...
View ToolThe easiest way to run LLMs locally. One command to pull and run any model. OpenAI-compatible API. 52M+ monthly download...
View ToolOpen-source ChatGPT alternative that runs 100% offline. Desktop app with local models, cloud API connections, custom ass...
View ToolPrivate local AI chatbot by Nomic. 250K+ monthly users, 65K GitHub stars. LocalDocs feature lets you chat with your own...
View ToolFile discovery via pattern matching across the repository.
Claude CodeSearch file contents by pattern with regex support.
Claude CodeSet up Codex Chronicle on macOS, manage permissions, and understand privacy, security, and troubleshooting.
Getting Started
Warp going open source is not just a terminal story. It is a signal that AI coding tools are shifting from chat UX towar...

The math of agent pipelines is brutal. 85% reliability per step compounds to about 20% at 10 steps. Here is why long cha...

From single-agent baselines to multi-level hierarchies, these are the seven patterns for wiring AI agents together in pr...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.