This is a submission for the Sanity Challenge, Path One: Ship an Agent That Queries Real Content
Which AWS quota is actually current? You copied a default vCPU limit off the AWS docs, shipped it, and it broke in production. I have done this. The number was stale, and nothing warned me.
Here is what makes it nasty. For one AWS fact, three official pages can each give you a different number. An old User Guide says one thing. The Service Quotas console says another. A pricing page says a third. All look official. None of them tells you which is live today.
So I built an agent that answers "which AWS value is current?" and then proves it. It reads typed facts from a Sanity Context Knowledge Base, picks the winner with a deterministic rule the model is not allowed to override, and shows both the current value and the one it replaced, each with its source. Then it does the part most content agents skip: it calls the live AWS API (read-only) to check whether even the reconciled record is still true. On the EC2 vCPU quota it turns up three different numbers, docs 32, record 5, live 16, and puts all three on the screen.
Stack: Amazon Nova Pro on Bedrock, Strands Agents (Python), a Sanity Context Knowledge Base read over the hosted Context MCP, and a read-only live AWS cross-check.
The challenge sets a hard bar: "the strongest submissions show an agent that only works because the content was structured. If a keyword search would have gotten you the same answer, aim higher."
Fair. So I built a fact where keyword search gets it wrong on purpose. Real one too: the max IOPS per volume for an EBS general purpose SSD. The current number is 80,000 (gp3, from the EBS console). The old number is 16,000, the legacy gp2 ceiling, still sitting in an older SSD guide. That old guide repeats the exact phrase you would type into a search box: "maximum IOPS per volume for a general purpose SSD EBS volume." It is stale and wordy, so keyword scoring loves it.
Watch it pick the wrong answer. Same content, real TF-IDF, the question a person would actually ask:
The stale 16,000 wins by a mile. Keyword search hands you the wrong number and sounds sure of it.
Run the credential-free core yourself in under a minute (public dataset over anonymous GROQ, local reconcile, read-only live AWS check, no model or token needed):
For the full LLM agent through the Context MCP, copy .env.example to .env and add a Bedrock region plus a Sanity Context Viewer token (the README walks through it). There is a JSON mode too, for piping into something else:
| Fact | Reconciled (from the record) | Superseded | Live AWS | Result | |------|------------------------------|-----------|----------|--------| | EC2 On-Demand Standard vCPU quota | 5 (console) | 32 (old user guide) | 16 | DRIFT | | EBS gp3 max IOPS per volume | 80,000 (console) | 16,000 (old SSD guide) | unavailable | trusted (no such live quota) | | S3 Standard $/GB-mo | 0.023 (pricing page) | 0.021 (stale blog) | 0.023 | AGREE | | RDS PostgreSQL oldest major | 13 (release notes) | 11 (old tutorial) | 11 | DRIFT | | Lambda concurrent executions | 1000 (dev guide) | n/a | unavailable | trusted | | Graviton4 (R8g) availability | Available (instance types) | n/a | Available | AGREE |
Look at the EC2 row. Docs say 32. The reconciled record says 5. The live account says 16. Three numbers for one quota, and the agent shows all three with their sources instead of picking one and hoping. The drift is not a failure. It is the honest answer: this is the current record, and here is where reality has already moved past it.
What I pointed Sanity Context at: my own Sanity content. Every fact is a typed awsFact document in the production dataset, not a wall of prose:
source.kind and effectiveDate are real fields, so the rule that picks the winner is dull and readable:
highest source precedence wins (console and pricing page beat changelog, which beats official docs, which beats a blog), and the newest effectiveDate breaks ties.
The Knowledge Base: a Sanity Context Knowledge Base indexes these facts. The build reads them ahead of time and writes short cited entries. Where two records fight, the entry keeps both numbers and both sources next to each other.
Which Context tools the agent used: the agent pulls facts over the hosted Context MCP with knowledgebasesearch (ranked lookup) then knowledgebaseread (full entry). That is the proof the answer came from Sanity and not from the model's memory. (It can also fall back to anonymous GROQ over the public dataset for the no-token path.)
