Co-Analyst.

Natural-language questions answered from the retained corpus, with a citation under every claim and a trace of how the answer was assembled.

What it is, precisely

The Co-Analyst is a question-answering path over retrieval. It classifies the question, plans which retrievers to run, assembles a context, generates an answer, and attaches the evidence that answer was built from.

What it is not: a general assistant that answers from model memory. If the corpus has nothing relevant, the honest output is that it has nothing — not a fluent guess.

Classifyquestion kindPlanretriever mixRetrievefuse + rankCritiqueis it supported?Answer+ citationsif critique finds the evidence does not support an answer, saying so is the correct output
Fig. Five stages. Critique sits before generation so a thin evidence set does not become a fluent guess.

The request

POST /v1/ask
curl -X POST https://api.omniintel.example/v1/ask \
  -H "Authorization: Bearer $OMNI_INTEL_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "Which actors targeted GCC oil & gas in 2026 using ransomware?" }'

The stages

  • Classify — is this an identifier lookup, a conceptual question, or a relationship question? That determines the retriever mix.
  • Plan — choose retrievers and their budgets.
  • Retrieve — run them, fuse, rank.
  • Critique — check the assembled evidence actually supports an answer before generating one.
  • Answer — generate, with citations bound to the retrieved documents.

Evidence chains

A citation is not a footnote to a URL. It resolves to a document that is retained in the knowledge base, with the fetch time and the source's reliability grade attached — so a claim can be checked against exactly what was read.

Where the Co-Analyst runs

Consolidated on one engine

The Co-Analyst engine is consolidated onto sara-open rather than OmniIntel serving its own chat. The label stays “Co-Analyst” and the product surface is unchanged; what moved is the engine behind it.

Practical consequence when reading the code: OmniIntel pushes KB chunks to it and exposes its graph as a contract, and engine-side chat scaffolding written for the earlier design is dormant. Do not assume a graph_retriever in the Python tree is on the live path.

Naming

It is the Co-Analyst — never a copilot, and never described as “the AI” or “the model” in anything customer-facing. The engine behind it is internal infrastructure, not a feature to market.

Co-Analyst — OmniIntel docs · OmniIntel