Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.agno.com/llms.txt

Use this file to discover all available pages before exploring further.

Ungrounded research is confident and wrong. A research agent needs to know the rules it operates under, the body of knowledge it can draw on, and what was decided before. Agno layers these so each agent carries the right context without carrying everything.
LayerHoldsMechanism
Static contextThe mandate, policy, and process that never change per queryInjected into every system prompt
Research libraryCompany profiles, sector analyses, source documentsRAG over a vector database
Prior workPast decisions and memosFile navigation tools

Layer 1: static context in the prompt

Rules that apply to every question belong in the prompt, not in retrieval. Load them once and inject them into every agent.
from pathlib import Path

CONTEXT_DIR = Path(__file__).parent


def load_context() -> str:
    sections = [f.read_text() for f in sorted(CONTEXT_DIR.glob("*.md"))]
    return "\n\n---\n\n".join(sections)


COMMITTEE_CONTEXT = load_context()

instructions = f"""\
You are the Risk Officer on a $10M investment team.

## Committee Rules (ALWAYS FOLLOW)

{COMMITTEE_CONTEXT}

## Your Role
Enforce position limits and sector caps on every recommendation.
"""
Mandate, risk policy, and process are markdown files. Every agent gets the identical rules verbatim, so no specialist can drift from the mandate.

Layer 2: the research library in RAG

The corpus the agents reason over goes in a shared knowledge base, searched per query. Instantiate it once and import it everywhere, never recreate it per agent.
from agno.agent import Agent
from agno.models.openai import OpenAIResponses

# Shared instance, imported from a settings module
from agents.settings import team_knowledge

analyst = Agent(
    model=OpenAIResponses(id="gpt-5.5"),
    knowledge=team_knowledge,
    search_knowledge=True,
    instructions="Search the research library before forming a view. Cite what you used.",
)

reply = analyst.run("What does our research say about semiconductor supply?").content
# Answers from the library and cites the profiles and analyses it pulled,
# instead of from the model's prior.
search_knowledge=True lets the agent pull the relevant profiles and analyses per question instead of carrying the whole library in context.

Layer 3: prior work on disk

Past memos and decisions are durable artifacts, not vectors. Give a read agent file tools so it can navigate the archive and ground new work in what was already concluded. The agent that writes new memos gets write access; the agent that reads them does not. Keep the boundary explicit.

Why three layers, not one

If you only hadYou would lose
The promptA corpus too large to inline
RAGHard rules that must apply to every query, verbatim
The archiveThe reasoning trail behind past decisions
Each layer answers a different question: what are the rules, what do we know, what did we decide.

Next steps

TaskGuide
Make grounded research compoundInstitutional learning
End in an auditable artifactStructured deliverable

Developer Resources