Pimp My IDE / garage dispatch
Back to garage
Web fetches / hidden response text / 15 Oct 2026

The body is not the whole response.

A fetch tool can hand an agent status text, redirects, headers, and the page body. Only the last part is visible in a browser. Put the hidden parts through an intake rule before they reach the model.

Treat every server-controlled field as data. Decide what the model may read separately from what the agent may do.

Headers have joined the prompt

Signals Corps scanned 217,097,223 responses from ten percent of Common Crawl's September 2026 crawl. It found 7,959 sites that sent a response header aimed at an AI system. Most pointed elsewhere. The study counted 7,271 sites sending pointers, including 6,989 that used x-llms-txt.

The smaller number matters more for control design. Thirty sites sent what the researchers classified as injection attempts. Twenty-four used a header named X-AI. The study says most were pranks. A prank still tests whether a fetch layer passes server-written instructions into the same text stream as the user's request.

Fetching a page is an input event, even when the user only asked for a status check.

The first gate belongs in the fetch layer

HTTP responses contain a status line, header fields, and content. RFC 9110 defines field values as part of the message. A custom field has no special authority. It is text chosen by a server.

A fetch tool should not serialize every field into prose by default. Return typed data. Keep status codes numeric. Keep redirects as a bounded list of URLs. Pass only named protocol fields needed for the task. Omit cookies, authentication challenges, vendor fields, and free-form reason text unless the task asks for them.

If a task needs raw headers, mark that block as untrusted input. Put a byte ceiling on each value and the whole block. Log which fields crossed the gate. Do not follow a header-provided URL as if it were part of the original request. That is a new fetch to a new origin.

Filtering cannot carry the whole load

OWASP defines indirect prompt injection as external content that changes model behavior. Its guidance says to separate untrusted content, validate outputs, restrict privileges, and require human approval for high-risk actions. It also says foolproof prevention is unclear.

That is the practical boundary. A denylist for phrases such as "ignore previous instructions" will miss new wording and can flag harmless text. A model may also follow a field that looks like friendly integration guidance rather than an attack. Input handling should reduce exposure. Capability controls should limit the result when hostile text still reaches the model.

Read scope and action scope are different controls

A read-only uptime checker may need a status code and selected cache fields. It does not need cookies, arbitrary vendor headers, page text, a shell, or repository write access. A documentation agent may need body text and links. It still does not need to execute instructions found there.

Anthropic's agent guidance recommends environmental feedback, checkpoints, stopping conditions, sandboxed testing, and guardrails. Apply those controls after the intake filter. The model receives bounded data. The action layer checks the requested operation against a separate policy. High-risk actions stop for review.

Audit behavior after the fetch

The Signals Corps study found 283 distinct AI-directed header names and many keyword false positives. That makes name-only detection a noisy primary control. Record what the agent did next.

  1. Save the requested URL, redirect chain, status code, and allowed field names.
  2. Record which response parts reached the model and their byte counts.
  3. Record proposed tool calls, denied calls, approvals, and final effects.
  4. Test the same task with hostile text in the status phrase, a custom header, a redirect target, and the body.
  5. Run the test with the real user agent because servers can return different content to bots.

Build the airlock before the crawler

The safe default is narrow and typed. Add fields only when a named task needs them. Keep destination changes, model input, and tool authority visible as separate events. The component below drafts that policy. It does not fetch a URL or inspect an agent.

Interactive makeover / fetch policy

Header intake airlock

Traditional purpose replaced: one "fetch URL" tool that pours a whole response into model context. Better version: one native intake selector plus separate action fuses and a copyable test sheet.

Set the intake gate

Choose one response view. Then mark the capabilities your test fixture must try to deny.

Model input
Action fuses to test
BODY / NARROW0 action fuses selected

Keep hidden response text outside the prompt.

The policy still needs a real fetch implementation, fixtures, logs, and review.

Model receivesVisible body text under a byte ceiling.
Still excludedStatus text, headers, cookies, and redirect prose.

Narrow intake selected. No runtime evidence is attached.

What this component proves It keeps model input and action authority on separate controls and drafts required evidence fields. It does not fetch a response, filter headers, block an action, or prove resistance to prompt injection.

Sources read / 15 Oct 2026

Evidence bay

Current research signal

217 million response headers

Signals Corps reports its Common Crawl sample, AI-directed field counts, injection classifications, bot-detection fields, false positives, and model tests.

Read the study
Protocol reference

HTTP semantics

RFC 9110 defines an HTTP message as control data, a header section, content, and optional trailers. It defines field names and values as protocol elements.

Read RFC 9110
Risk guidance

OWASP prompt injection

OWASP describes direct and indirect injection, says complete prevention is unclear, and recommends segregation, validation, least privilege, approval, and testing.

Read the guidance