LlamaIndex made RAG something you can ship in an afternoon. Load docs into an index, attach an LLM, query. The gap most teams hit isn't the framework — it's finding a good data source. Your agent's own Lumbox inbox is a better source than most.
Why the inbox is good RAG fodder
- It's high-signal, low-noise (it's already filtered by being sent to you).
- It's structured — sender, date, subject, thread ID are all fields.
- It grows organically as the agent does its work.
Wiring it up
from llama_index.core import VectorStoreIndex, Document
from lumbox import Lumbox
lumbox = Lumbox(api_key=os.environ["LUMBOX_API_KEY"])
def load_inbox_as_documents(inbox_id: str) -> list[Document]:
messages = lumbox.inboxes.list_messages(inbox_id=inbox_id, limit=500)
return [
Document(
text=m.text,
metadata={
"from": m.from_address,
"subject": m.subject,
"date": m.received_at,
"thread_id": m.thread_id,
},
)
for m in messages
]
docs = load_inbox_as_documents(my_inbox_id)
index = VectorStoreIndex.from_documents(docs)
query_engine = index.as_query_engine()
print(query_engine.query("What did Acme say about the Q3 timeline?"))
Keep it fresh with webhooks
Subscribe to Lumbox's email.received webhook and incrementally upsert new messages into the index. No re-indexing, no polling. lumbox.co.