Horizon Education Aid — Need-Based Scholarship

Fictional demo · Synthetic data only

For agents

This page registers six tools on document.modelContext, so an assistant works against the portal's own rules, version checks and refusals rather than against a rendered form. Four of the tools only read. The two that can change something refuse anything they cannot verify, and neither of them can finish the application.

The six tools

Where the assistant stops

This is the same boundary the disclosure states before you allow assisted access, and the server — not the tool descriptions — is what enforces it.

What the assistant may do

  • Link policy-allowed sources to draft answers
  • Propose the synthetic .test email for the applicant to review and declare
  • Create a Review for the applicant to inspect, but only from a ready Draft with no unsaved changes

What only the applicant can do

  • Choose a packet
  • Make the applicant declaration
  • Resolve the income conflict
  • Return from Review
  • Confirm or submit the application
  • Load, download, print, or export a Receipt

If Review creation succeeds, it keeps that exact saved content and CiteApply turns assisted access off. This choice controls only CiteApply's six assisted tools. It does not change permissions you separately grant your browser, extension, or assistant.

In Chrome

  1. Turn WebMCP on

    Open chrome://flags/#enable-webmcp-testing, set it to Enabled, and relaunch — or launch Chrome with --enable-features=WebMCPTesting. This was last verified end to end on Chrome 152.0.7977.66.

  2. Start the Conflict packet

    On the landing page, choose Start conflict packet. Then check that the status line under the stage heading ends WebMCP: six CiteApply tools registered.

  3. Allow assisted access yourself

    Click Review and allow assisted access, read the disclosure, then Allow assisted access. Until you do, a protected read is refused with consent_required and discloses nothing.

  4. Ask, then watch the Assisted activity panel

    Every tool call the page answers is listed there with its outcome and the versions the server returned. A refusal is listed exactly like an acceptance.

What to ask

  1. List the CiteApply tools on this page, then read the application state in `redacted` mode and tell me what it discloses.
  2. Read the evidence index and the active form requirements, then apply every supported binding you are allowed to apply in one atomic call.
  3. Now bind annual household income from the best source you can find.

The third one cannot succeed on the Conflict packet. The portal returns, verbatim:

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

Nothing is written, and the income row keeps saying that two accepted sources disagree. Both source buttons stay unavailable until the applicant chooses a reason, and that reason is what the frozen review and the receipt quote back.

In the ChatGPT in-app browser

Open this origin in the in-app browser and check the same status line under the stage heading.

Either way, no step lets an assistant declare the email, resolve the income conflict, submit, or read the receipt.

What this demonstration does not claim

Start a synthetic application