When to use this / when not to use this
Use this when
- An agent recommends actions from current, external, or location-sensitive evidence.
- You need model flexibility without allowing generated source labels or unsupported confidence.
Do not use this when
- The task is deterministic and a normal rules engine can produce the complete result.
- You cannot define what evidence is required, stale, unavailable, or safe to expose.
Separate model judgment from server-owned proof
A tool-using model should decide which evidence it needs and explain the final recommendation in natural language. It should not create public source objects or declare its own tool calls trustworthy; its structured proposal should reference completed call IDs that the server can independently verify. Sources: Ask Siargao agent routing and source governance, OpenAI function-calling guide.
The server can then derive source labels, decision IDs, and displayable artifacts from the audited tool transcript. This preserves the model's ability to synthesize a useful answer while giving deterministic code the final say over which evidence can appear publicly.
Ownership boundary
- Model: understand the request and choose typed tools.
- Model: synthesize checked evidence and write the recommendation.
- Server: validate tool completion, source sufficiency, and claim boundaries.
- Server: derive public sources, IDs, and allowlisted artifacts.
Encode evidence requirements by decision kind
A named accommodation, a surf session, and a disrupted itinerary do not need the same evidence. Ask Siargao requires place-identity evidence for named properties, current condition evidence for immediate plans, and both marine or tide evidence and a condition judgment for surf recommendations. Sources: Ask Siargao Reality Check contract, Google Places API policies.
The validator should know whether a source can support a decisive result, whether it is current enough for the request, and whether a dependent check ran after its prerequisite. Merely counting tool calls makes a busy transcript look like proof even when the required fact is missing.
Evidence contract checks
- The proposed decision kind matches the server-recognized request kind.
- Every referenced tool call completed and was used by the final answer.
- At least one verifying source supports a decisive keep, change, or avoid result.
- Decision-specific current evidence and semantic ordering requirements are satisfied.
The model proposes a judgment from governed tools, then server validation converts only supported evidence and artifacts into a public answer.
Source: Ask Siargao on-demand Reality Check lifecycle- 01RequestRecognize the decision kind and missing context
- 02EvidenceModel selects governed tools
- 03ProposalStructured judgment references completed calls
- 04ValidationServer checks sources, claims, and artifacts
- 05AnswerReturn a checked, partial, or bounded result
Degrade without turning a provider failure into confidence
External evidence is partial by nature. Weather may succeed while a place lookup fails, or current marine evidence may exist without enough detail for a surf-safety claim. Preserve successful evidence, mark the result partial when it still supports the action, and use needs confirmation when the missing check blocks a decisive call. Sources: Ask Siargao on-demand Reality Check lifecycle, Open-Meteo weather API documentation.
A failure source can explain a limitation but cannot verify a positive claim. The response should give the traveler one practical next step—call ahead, confirm locally, or keep the plan flexible—without promising background monitoring or a later intervention.
Useful degraded states
- Checked: sufficient verifying evidence and no terminal required gap.
- Partial: usable verifying evidence plus a relevant failed or unavailable check.
- Unavailable: no verifying evidence supports the requested decision.
- Needs confirmation: the product names the missing fact and a bounded next action.
Persist public artifacts instead of private tool transcripts
The durable product record should contain traveler-visible messages, sanitized source summaries, and explicitly selected cards, itineraries, or decision summaries. Exact browser coordinates, raw provider payloads, private tool arguments, and internal caveats should stay outside authenticated history and public share surfaces. Sources: Ask Siargao routes and surfaces reference.
Artifact selection needs the same evidence boundary as prose. An unrelated recommendation card or an artifact produced by a failed provider should not become public merely because the model knows its identifier. Build an allowlist from successful, used tool results before persisting or sharing anything.
Persistence boundary
- Store traveler-visible message content and sanitized public sources.
- Store only artifacts selected from successful, used evidence calls.
- Derive ownership from the authenticated session rather than request-body user IDs.
- Exclude exact coordinates, raw tool arguments, and provider response bodies.
Reality Check evidence state machine
This state machine keeps an explicit traveler request separate from evidence collection, server validation, public completion, and bounded degradation when a required source is unavailable.
- Requestedmutable
The decision kind and essential traveler context are being resolved.
- complete context → Collecting
- missing context → Requested
- Collectingmutable
The agent selects governed tools and records completed evidence calls.
- propose result → Validating
- provider gap → Validating
- Validatingderived
The server checks kind, source sufficiency, claim limits, and artifacts.
- sufficient → Checked
- mixed evidence → Partial
- required gap → Needs confirmation
- Checkedimmutable
A decisive result is backed by the required verifying evidence.
- return public summary → Completed
- Partial / Needs confirmationderived
The answer preserves usable evidence and exposes the blocking limitation.
- return bounded summary → Completed
- Completedterminal
The sanitized answer and selected public artifacts have been returned.
Implementation examples
Concrete commands and data shapes you can adapt.
const proposal = parseRealityCheck(modelOutput);
const evidence = resolveCompletedCalls(proposal.evidenceToolCallIds);
const result = validateRealityCheckProposal({ proposal, evidence, recognizedKind });
if (!result.valid) {
return buildNeedsConfirmationSummary(result.reason, evidence);
}
return buildPublicDecisionSummary(result.value, evidence);Decision log
The choices that shape the design—and what each choice costs.
- Let the model choose tools
Natural-language requests do not map cleanly to one fixed provider or evidence path.
Tradeoff: The runtime needs strict typed tools, bounded turns, and audited call references. - Derive public sources on the server
Source identity and success state must come from executed provider results, not generated prose.
Tradeoff: Every new provider or source label requires validation and persistence updates. - Keep Reality Checks synchronous and on demand
One request contains the trigger, evidence time, cost, result, and failure state.
Tradeoff: The product does not promise monitoring, proactive alerts, booking, or operator intervention.
Failure cases
What breaks, how it presents, and the recovery boundary.
- The model references a tool call that did not complete
- Signal
The proposed evidence ID has no matching successful call and result pair.
- Response
Reject the proposal and return a bounded result from the evidence that actually completed.
- A current surf recommendation lacks marine or tide evidence
- Signal
The answer proposes a decisive surf verdict from place or memory context alone.
- Response
Fail the evidence contract and state which current condition must be confirmed.
- A failed provider artifact is selected for display
- Signal
The final payload names a card or itinerary produced by an unsuccessful or unused call.
- Response
Drop or reject the artifact through the server-built allowlist before persistence.
Repositories and primary references
Read the implementation, specifications, and tool documentation behind the article.
- Ask Siargao source repositoryThe public Next.js application, agent runtime, data layer, tests, and operational documentation.
- Reality Check contractThe decision kinds, verdicts, structured payload, validation reasons, and public source states.
- Agent routing and source governanceThe ownership boundary between model tool choice and deterministic privacy and source controls.
Related projects
Inspect the systems that ground this guide in implementation work.
Last updated: