SPS 2026 Annual Meeting CSPT / SCPT

The two-prompt build · data flow

What happens to your PDF

This is the research assistant built live from two pasted prompts: one HTML file on your desktop. It reads your PDFs inside the browser tab, finds passages by keyword, and sends the best-matching pages with your question to a model. This page shows exactly what goes where.

Stays in the browser tab

Your PDFs, all their text and the keyword search. Held in the tab's memory only: close or reload the tab and it is gone.

Leaves, once per search

Your question plus the full text of up to 8 best-matching pages, to OpenRouter and on to Claude Sonnet 5. With no key saved, nothing leaves at all.

Simple on purpose

No server, no accounts, no database, no install. Simple also means fewer guards: no zero-retention rule on the request and no security policy on the page.

  • Carries content from your documents
  • Comes in (download or answer)

Before anything

When you open the file

One download

Your browser, on your laptop

The network

The internet

1

Double-click the HTML file

It opens straight from your desktop. There is no website behind it. The page fetches one thing: the open-source library that knows how to read PDFs.

file:// · pdf.js 3.11.174 + its worker

Comes in: the pdf.js library code

cdnjs, a public code library

Run by Cloudflare. Hands out the same library file to everyone who asks.

Receives an ordinary download request. Nothing from your documents, ever.

Phase 1 · built by prompt 01

When you load your PDFs

Nothing leaves your browser

Your browser, on your laptop

The network

The internet

3

Drag PDFs onto the page

Several at once is fine. "Upload" here means the browser reads each file from your own disk. PDF only.

File API · file.arrayBuffer()

Phase 2 · added by prompt 02

When you search

Question + whole pages leave

Your browser, on your laptop

The network

The internet

6

Match your words against every page

Ordinary keyword ranking, no AI: common words are dropped, and pages score higher when they use your words often and other pages rarely do. The best 30 are listed with file name, page and the matching words highlighted.

BM25 · k1 = 1.5 · b = 0.75 · stop-word list

Still nothing

Zoom in on the red arrow in step 7

What is inside the request

Sent

  • Your question, as typed
  • The complete text of up to 8 pages, each labelled with file name and page number. A dense page can be 500 words or more.
  • The instruction to answer only from those pages
  • The model name, fixed to Claude Sonnet 5
  • The OpenRouter key, as the authorisation header

Never sent

  • The PDF file itself
  • Any page outside the top 8 matches
  • Pages from a search you ran earlier: each search stands alone
  • Anything at all, if no key is saved
  • Your name, email or any account of yours: the file has none
POST https://openrouter.ai/api/v1/chat/completions
Authorization: Bearer <your OpenRouter key>

{
  "model": "anthropic/claude-sonnet-5",
  "messages": [
    { "role": "system",
      "content": "You are a research assistant. You must answer the user's question using
                  ONLY the passages provided below ... If the passages do not contain enough
                  information to answer the question, say so plainly ..." },
    { "role": "user",
      "content": "Question: <your question>

                  Passages:

                  Passage 1 (source: "S7A_Guideline.pdf", page 4):
                  <the whole text of that page>
                  ---
                  ...
                  Passage 8 (source: "S7B_Guideline.pdf", page 11):
                  <the whole text of that page>" }
  ]
}

Why nothing confidential

Whole pages of whatever you load go to the model provider with each search, and this file does not ask for zero data retention. Published guidance, your own papers, a protocol template: yes. Anything under confidentiality: no.

The accurate sentence for this tool: the PDF never leaves; up to eight full pages per search do.

Two tools, one morning: how the data paths differ

Second Cortex The two-prompt file
Runs fromA web address (static files on Vercel)One HTML file on your desktop
ReadsPDF, Word, Markdown, plain text, plus your notesPDF only
Finds passages byMeaning: an in-browser language model compares vectors, across English, French and GermanKeywords: the words you typed must appear on the page
Sent per questionQuestion + up to 10 excerpts of at most 190 wordsQuestion + the full text of up to 8 pages
ModelClaude Sonnet 5 by default; short menu of zero-retention-eligible modelsClaude Sonnet 5, fixed
Zero data retentionEnforced on every request; refuses rather than fall backNot requested; depends on the key owner's OpenRouter settings
Where the browser may connectIts own site and openrouter.ai only, enforced by the page's security policycdnjs (for pdf.js) and openrouter.ai; no policy restricts it
Kept between visitsLibrary, notes, history and key, in this browserThe key only. Documents are reloaded each time.
Both send the request straight from your browser to OpenRouter. Neither has a server of its own in between.