A stop can be a useful result.
A research agent needs to know whether it should make a request, which interface is relevant, and when a condition requires operator review.
Four results, four actions
| Result | Agent behavior |
|---|---|
| route_available | Check freshness and operator authorization, then execute the eligible recommendation. Check the actual response for new restrictions. |
| blocked | Stop. Keep the reason and evidence. Do not retry through a different identity or browser. |
| conditional | Resolve the license, payment, authorization, redirect or unsupported policy. No automatic execution. |
| unknown | Stop and report missing evidence. Unavailable evidence is not permission. |
Example: a license alongside a free page
If a page returns 200 but advertises a license this pilot cannot interpret, the outcome remains conditional. A zero observed access charge does not establish permission. An API or MCP endpoint remains a candidate until its operation, entitlement and cost are verified.
Freshness is part of the decision
Responses carry checked_at and expires_at. Cache hits retain the original observation time and expose evidence age. Eligible query-free advice is cached for at most five minutes with shorter publisher freshness respected. Send Cache-Control: no-cache for a current inspection. Stop on an execution-time challenge, block, payment request or changed policy.
Measure the right outcome
Report fetch success only after a fetch succeeds. Record policy stops separately from retrieval. Feedback is a client report, not independently verified task completion. Credentials identify an enrolled integration, not proof of autonomy.
Reproduce the behavior
The source release includes tests for decisions, changed restrictions and expiry. Run node --test tests/*.test.mjs. The agent example applies this loop, and the benchmark records overhead and stopped cases.
Reference: Robots Exclusion Protocol, RFC 9309. Public signals do not grant rights or replace publisher terms.