Applications for the 2026–27 cycle are open until 30 June 2026

The agent cites.
You decide.

CiteApply is a scholarship application an assistant can help you fill in — but only from three source records, and only up to the point where judgment starts. The page registers six WebMCP tools on itself, so an agent in your browser works against the portal's own rules, version checks and refusals instead of guessing at the form.

Start with a set of records

Every application here begins from three documents — an enrollment record, a household statement and an income statement. Take one of the two sample sets, or upload a set you downloaded from this page.

Try the sample records

Read the records before you start: each one opens as the PDF the server parses. The interesting set is the one that disagrees — two accepted records give different incomes, the portal refuses to choose, and so does the agent. Watching it happen takes about half a minute: you allow access, and a scripted client calls the real tools while the form fills in front of you.

Fictional demo · Synthetic data only

You decideTwo accepted records disagreedocument.modelContextget_form_requirementsrules, not answersget_evidence_indexclaims, as handlesapply_evidence_backed_answers · one atomic callconflict_requires_humannothing was writtenthe saved application didnot moveEnrollmentHouseholdIncome AIncome B
An illustration of the sequence this demonstration performs. It is a drawing, not a live session.

The records you will be working from

These are the actual files the server reads. Open any of them, or download a whole set and upload it back — the application that opens is built from the sentences inside them, never from anything typed in here.

Upload your records

Download one of the sets above and upload its three PDFs here. The server checks each file against the records it committed to and opens that application.

No files chosen yet.

Nothing real is accepted, and nothing you choose is kept: each file is hashed, compared, and dropped. Anything that is not one of this demonstration's own records is refused, by name-free message, before an application exists.

What this build actually guarantees

  • 6 WebMCP tools registered

    Declared on document.modelContext when the application page loads. Four read; two can move the draft.

  • 0 ways an agent can submit

    No tool submits, confirms, resolves a conflict or loads a receipt. The server refuses those calls; it does not merely omit them.

  • 1 call to bind a whole batch

    apply_evidence_backed_answers is atomic and version-checked. Every entry validates, or nothing changes.

  • = same review, either way

    By hand or assisted, the walk ends on the same frozen review and the same content hash on the receipt.

What the scholarship is

Horizon Education Aid is a need-based award for students already enrolled in an undergraduate program. Every figure below is invented for this demonstration.

Award
INR 120,000 for the academic year, paid in two instalments and renewable once on the same evidence.
Who can apply
Full-time undergraduates at a recognised institution whose household income falls under the published threshold. Applicants under 21 also give a guardian's name and the household size.
Cycle dates
Opens 1 March 2026, closes 30 June 2026, decisions posted by 15 August 2026.
What you send
Three records — an enrollment letter, a household statement and an income statement. The office reads the records; it does not ask you to retype them.

Evidence, not guesses

Every answer names its source

An answer here is a link to a record, not a string an assistant thought was plausible. The application shows what the answer is, which document it came from, and the sentence in that document it rests on — and the tools hand out opaque claim handles rather than raw PDFs or storage paths.

Where a second record says the same thing, the answer is marked corroborated. Where nothing supports it, the answer is not written at all.

The refusal

The most important thing this agent does is stop

When two accepted records disagree about income, the write is refused. Not deferred, not guessed at with a confidence score — refused, with the reason and the one safe thing to do instead. The saved application does not move, and the choice stays on the page in front of you.

This is the server's own response, sent verbatim to the calling agent:

apply_evidence_backed_answers409

{
  "ok": false,
  "error": {
    "code": "conflict_requires_human",
    "message": "Income sources disagree. Resolve this in CiteApply.",
    "safeActions": ["resolve_in_visible_application"]
  }
}

A form that moves

Requirements that change underneath the agent

Six questions apply when the application opens. Answer the household one and two more become required — the guardian's name and the household size — so the form the agent read a moment ago is no longer the form in front of it.

That is why get_form_requirements returns rules rather than a field-to-answer map, and why every write carries the version it was based on. An agent working from a stale picture is refused rather than allowed to overwrite.

One human commitment

You read the frozen review, and only you submit

Preparing a review freezes exactly what you approved and closes assisted access in the same movement. From there the assistant has nothing left to do: it cannot return from the review, cannot confirm, and cannot load, print or export the receipt.

Both walks end in the same place — the same frozen review, and the same content hash printed on the same receipt.

With and without an assistant

The manual path is the whole product; the assisted path is the same product with a second pair of hands. Both are real here, and you can walk either one. The beats in ochre are the ones that are yours in both.

Filling it in yourself

  1. Open each of the three records and read them.
  2. Find the sentence that answers a question, then link that record to the answer.
  3. Notice when answering one question makes two more apply, and go back for those.
  4. Type and save your email, then declare it is yours.yours
  5. Read both income records, choose a reason, and stand behind one of them.yours
  6. Prepare the review, read it, and submit.yours

Asking an assistant

  1. It reads the active requirements and the evidence index through the page's own tools.
  2. It binds every supported answer in one atomic call — all of them or none, checked against the version it read.
  3. Two questions become required; it re-reads and binds those too.
  4. It can propose the synthetic email, but the field still reads “not yet declared” until you say so.yours
  5. It asks for the income answer and is refused. Nothing is written. conflict_requires_humanyours
  6. It prepares the review, then loses access. You read it and you submit.yours

Both paths reach the same three decisions that are only yours, and the same frozen review — the same content hash on the same receipt. The assistant removes the reading and the retyping. It does not remove you.

You do not need an agent to see the difference. Start the set that disagrees, allow assisted access, and a scripted client on the page calls the same six tools against the same server — every acceptance and both refusals land in the ledger while you watch. The application then counts what it did against what you did by hand, from this session only.

How it works

  1. Your records are read for you

    Starting a set parses its three PDFs on the server and turns them into a short index of claims. Nothing is typed in, and no record is treated as more than a claim until it is cited.

  2. Every answer names its source

    An answer is a link to a record, not free text. The application shows what each answer is, which document it came from, and the sentence in that document it rests on.

  3. You settle what the records cannot

    When two accepted records disagree, or when a declaration is yours to make, the portal stops and hands you the decision. Then it freezes exactly what you approved and submits that.

Or fill it in by hand

An assistant is optional and off until you turn it on. Once an application is open, CiteApply asks you which way you want to work — by hand, or with an assistant helping — and every control is on the page either way. Nothing is hidden while assisted access is off, and the two paths end on the same frozen review.

The six tools this page registers

Every tool is declared on document.modelContext with the hints below. Four only read. The two that can change something are version-checked and refuse rather than guess.

Four that only read

  • get_application_state

    readOnlyuntrusted content

    Reads the saved application. The redacted mode is safe before access is allowed; the protected mode is not offered until you allow it.

  • get_form_requirements

    readOnlythe portal's own rules

    Reads which questions apply and the rule behind each one. Rules, never a field-to-answer map.

  • get_evidence_index

    readOnlyuntrusted content

    Lists the claims parsed from this set's records as opaque handles. No raw PDF, no storage path, no full excerpt.

  • get_validation_issues

    readOnlythe portal's own rules

    Reads what is currently blocking review, in order. It changes nothing.

Two that can change the draft

  • apply_evidence_backed_answers

    can change the draftuntrusted content

    Links handles to answers in one atomic, version-checked call. Every entry validates or nothing changes.

  • prepare_submission_review

    can change the draftthe portal's own rules

    Freezes a ready draft into a review for you to inspect, then closes assisted access. It returns readiness, not the review.

Try it with an agent

Turn WebMCP on in Chrome, start the records that disagree, allow assisted access on the application page, and say these three things in order.

Turn WebMCP on

Chrome flag

chrome://flags/#enable-webmcp-testing

Launch switch

--enable-features=WebMCPTesting
Then say this, in order
  1. Read this application's requirements and evidence index, then fill in every answer you can support from the records.
  2. More questions just appeared. Re-read the active requirements and bind those too.
  3. Now prepare the submission review.

Now ask it to pick an income figure. It comes back conflict_requires_human, the saved application does not move, and the choice stays on the page in front of you. That refusal is the product working, not a failure.

Full instructions, including the ChatGPT in-app browser

Common questions

Is this a real scholarship?

No. Horizon Education Aid does not exist, the award and the dates on this page are invented, and nothing you do here is sent to any program. The applicant, the three records and every figure in them are synthetic.

What can the assistant never do?

Choose which records to start from, declare your email address, resolve a disagreement between two records, return from a review, confirm or submit the application, or load, print or export a receipt. The server refuses those calls; it is not a matter of the tool descriptions asking nicely.

What if I bring no assistant at all?

Then you have the whole product. Every control is on the page with or without assisted access, and nothing is hidden while it is off. In a browser without WebMCP the application page says so plainly and stays completely usable.

What is stored, and for how long?

Your answers, which record each one cites, and the review and receipt you produce — all against a session cookie that lasts 60 minutes. Because the records are synthetic, none of it is anyone's real data, and there is nothing here worth keeping.

Walk it yourself — it takes two minutes

Nothing you enter is submitted anywhere, the records are invented, and the session lasts an hour. Take the records that disagree if you only have time for one.