We can answer “why are the leaves yellow” not because we memorised anything, but because we can find the passage every time. When we cannot, we say so — which is more useful than three extra sentences that sound expert.
1. Why we can say “the material says…”
The lookup carries three conditions: what you grow, how far along it is, and the recent weather. Same question, different conditions, different passages.
We search with the situation of *this* planting, not with a bare keyword.
What comes back is source text with provenance, so we can tell you where a claim came from instead of “it is generally believed”.
When the material stops short, our answer stops there too, rather than continuing on invention.
2. We keep “in general” and “your plant” apart
General practice can answer how watering is usually done; it cannot answer whether *this* pot needs water now. We state the two separately: the general rule with its source first, then the situation of your planting, then our suggestion.
3. Figures are supplied, not drawn
We never draw a picture and never hand you an image link that may not load.
When a figure helps (pests, deficiencies, what something looks like), we write one line asking for it and the system supplies a real one.
So there are no broken images, no invented images, and no “I cannot send pictures” when we can.
4. When we do not look anything up
Ask “what is on today” or “check my plan” and we do not search: those questions are about your own account, and searching would only make the answer slower. Knowing when not to look is as important as knowing when to.
5. If you also write code
Retrieval is a separate HTTP service addressed by configuration (AGRI_KB_URL), never hard-coded.
One corpus gets one entry point: conversational retrieval through the harness plugin; MCP only reads user data — two entry points would mean two failure modes.
Context is assembled from five blocks: this job, nodes in the window, weather facts, retrieved passages with provenance, user constraints.
Figures go through a render instruction, [[figure: crop + topic]], and code fetches the image; the model emits no image URLs and no Markdown images.