Product

Cite, or stay silent

There is one rule underneath everything here: a factual claim must originate in something the agent retrieved from your material. The rest of this page is how that rule is kept.

not enough context → rephrase and search again Upload PDF · DOCX · MD Chunk + embed VectorChord rag_search loop LangGraph agent Answer + citation first person, sourced

A fresh state graph is compiled per request. The agent calls the search tool, judges the result, and either answers or goes round again.

Four things happen inside
one tool call

Query rewriting, fusion and budgeting live in the search tool rather than the agent. The agent's only decision is whether what came back is good enough.

"why is my index slow"
↳ "HNSW ef_search latency recall"
↳ "approximate nearest neighbour tuning"

Query rewriting

A student's phrasing rarely matches the lecture's. The tool expands the question into the vocabulary your documents actually use.

Result fusion

Several searches run and their rankings are fused into one list, so a passage that surfaces under multiple phrasings rises to the top.

budget reached — remainder dropped

Token budgeting

Only as much context as the chosen model can genuinely use is passed forward. The rest is dropped rather than truncated mid-sentence.

document lifecycle · enforced in three layers
StateWhat is true hereEnforced byQueue
uploadedBytes stored, nothing parsed yetAPI + row constraint
extractingText pulled out of the container formatWorker lease1
chunkingSplit on structure, not a fixed windowWorker lease2
embeddingVectors written to the tenant's indexWorker lease3
mappingTopics inferred and linked to chunksWorker lease4
readySearchable — and only now visible to studentsDB check constraint
failedTerminal, with the reason kept for youDB check constraint

A document cannot be answered from until it reaches ready. That is a database constraint, not a convention.

One assistant, powered by Claude

Powered by Claude. The grounding contract does not move with the model.

Anthropic

Claude Sonnet 5

The default. Best balance of reasoning depth and cost for long technical material.

Claude Opus 5

For courses where the questions are genuinely hard and the answer has to hold up.

Claude Haiku 4.5

Fastest and cheapest. Well suited to high-volume introductory cohorts.

What comes back to you

The questions are the
most honest feedback
you will get

Students ask the assistant things they would not put their hand up for. Those questions roll up into topic analytics every night.

  • Struggle index per topic — volume weighted by how many follow-ups it took.
  • Unanswered counter — questions where retrieval found nothing. Each one is a gap in your material.
  • Conversation summaries — so you can read the shape of a week without reading every transcript.
gaps · this week
QuestionAsked
How do I read an EXPLAIN plan?11
When does the planner pick a seq scan?7
What is a bitmap heap scan?5
Is work_mem per query or per node?4

Nothing in your uploads covers these. Twenty-seven students went away empty-handed.

Take control of your course

Upload your material, pick a model, share the link. Most courses are answering questions the same afternoon.