An index finds passages. A record holds what you decided.
Use both. They answer different questions.
The Problem
A vector store answers: which passages in my documents are closest to this question? It is good at that, and at scale.
It does not know that you decided last month to ignore a whole section of those documents, or that one source overrides another. That knowledge is not in the index. It is in somebody's head, or in a chat.
How Stompy Helps
Stompy keeps the second kind of knowledge: the decisions, the rules and the reasons, each as a named, versioned entry that you chose to lock.
The two work side by side. Your pipeline, built on Pinecone, Weaviate, Chroma, Qdrant, Milvus, pgvector, FAISS, LlamaIndex or Haystack, retrieves passages. Before it answers, it also searches the Stompy project for what you decided about this material. Stompy's own search is hybrid, vector similarity plus full-text, over the entries you locked.
Stompy is not a replacement for the index and is not trying to be one. It holds the small, curated body of decisions that tells the pipeline how to use the documents.
Integration Walkthrough
Keep a decision about the material
A rule about how the documents are to be used, with the reason.
lock_context(project="my-project",topic="source_precedence",content="""Rule: the 2026 policy document overrides the handbook where they differ.Why: the handbook has not been revised since the policy changed.""")
Read it alongside retrieval
Search the project record next to your own retrieval step, and give the model both.
import osimport httpxBASE = "https://api.stompy.ai/api/v1/projects/my-project"HEADERS = {"Authorization": f"Bearer {os.environ['STOMPY_PROJECT_KEY']}"}def lock(topic: str, content: str) -> dict:"""Keep a decision. Only called when the person asked for it."""r = httpx.post(f"{BASE}/contexts", headers=HEADERS,json={"topic": topic, "content": content})r.raise_for_status()return r.json()def search(query: str) -> dict:"""Find what the project already holds, by meaning."""r = httpx.get(f"{BASE}/search", headers=HEADERS, params={"query": query})r.raise_for_status()return r.json()passages = my_vector_store.query(question) # your indexdecisions = search("which source takes precedence") # your recordprompt = f"Decisions:\n{decisions}\n\nPassages:\n{passages}\n\nQuestion: {question}"
What You Get
- The index finds passages; the record says how to use them
- Decisions are versioned and named, so they can be found and changed
- Works beside any vector store or retrieval library
- A small curated record stays readable, unlike a log of everything
Start your own record
Join the waitlist and we will tell you when your place is ready.