You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Comprehensive critical evaluation of Brainiac's fitness as an open-source, self-hosted company-wide memory / knowledge base of everything — runs on weak hardware, scales to strong, dead-simple to self-host. Produced by a panel of specialist reviews across architecture, retrieval, data/scale, ingestion, deploy/DevEx, observability, security, and product/docs.
Verdict
Brainiac is an unusually well-engineered artifact — disciplined core/adapter split, a crisp two-layer model (vector chunks + provenance graph in one Postgres), a genuinely one-command deploy, and rationale-rich docs. It is a strong single-user / single-team memory today. It is not yet fit for the stated goal — company-wide, multi-team, everything-memory — for four structural reasons:
Retrieval is under-built for a real KB. Single-model dense-only search, and nomic-embed-text is used without its required search_query:/search_document: prefixes — a silent, corpus-wide recall loss that also invalidates every tuned threshold. No BM25/keyword fallback, no reranker, no fusion. ([Epic] Retrieval quality — make it a real knowledge-base engine #202)
The knowledge graph does not build at scale. With the default chat-driven extractor, bulk/auto-import stores chunks with zero nodes/edges; the differentiating layer only fills via manual curation. Coverage is Notion+Markdown only; Watch()/incremental-sync is dead code; no PDF/docx/html. ([Epic] Ingestion & connector breadth — memory of *everything* #205)
Effort is inverted. Heavy investment went into Layer-2 multi-tenant isolation (namespaces, quotas, export/import, temporal, rollups) while the retrieval core, connector breadth, and observability — the things the goal actually needs — lagged. And the isolation itself has real holes (below).
It's demo-grade on the ops/security/scale axes a company relies on: /metrics exposes almost nothing alertable, backups are off by default and restore is untested, there's no index behind the isolation wall, and by-id mutations bypass the wall entirely (cross-namespace takeover).
Nothing here is a rewrite — the model is lean and the seams are right. It's a matter of re-prioritizing toward the goal.
Cross-cutting themes (what the panel converged on)
Layer-2 hard isolation is heavy for the overwhelmingly single-team target — keep it opt-in and off by default; do not expand it before the retrieval/ingestion/ops gaps close.
Coarse lifetime-cumulative latency quantiles; the _bucket series is the useful part.
Comprehensive critical evaluation of Brainiac's fitness as an open-source, self-hosted company-wide memory / knowledge base of everything — runs on weak hardware, scales to strong, dead-simple to self-host. Produced by a panel of specialist reviews across architecture, retrieval, data/scale, ingestion, deploy/DevEx, observability, security, and product/docs.
Verdict
Brainiac is an unusually well-engineered artifact — disciplined core/adapter split, a crisp two-layer model (vector chunks + provenance graph in one Postgres), a genuinely one-command deploy, and rationale-rich docs. It is a strong single-user / single-team memory today. It is not yet fit for the stated goal — company-wide, multi-team, everything-memory — for four structural reasons:
nomic-embed-textis used without its requiredsearch_query:/search_document:prefixes — a silent, corpus-wide recall loss that also invalidates every tuned threshold. No BM25/keyword fallback, no reranker, no fusion. ([Epic] Retrieval quality — make it a real knowledge-base engine #202)Watch()/incremental-sync is dead code; no PDF/docx/html. ([Epic] Ingestion & connector breadth — memory of *everything* #205)/metricsexposes almost nothing alertable, backups are off by default and restore is untested, there's no index behind the isolation wall, and by-id mutations bypass the wall entirely (cross-namespace takeover).Nothing here is a rewrite — the model is lean and the seams are right. It's a matter of re-prioritizing toward the goal.
Cross-cutting themes (what the panel converged on)
Rememberis non-atomic (Transaction-wrap Remember (dedup + quota + insert) #222).discriminators->>'project'is unindexed → the isolation wall, quotas, export, and delete all seq-scan (Generated 'project' column + btree index on nodes & chunks #226);summary_embeddinghas no HNSW (HNSW index on nodes.summary_embedding #227).Recommended sequencing
Epics
area:retrievalarea:corearea:scalearea:ingestionarea:deployarea:observabilityarea:securityarea:product-docsWhat is superfluous / to cut or defer
plugins.Registry[T]— dead code (Remove or wire up plugins.Registry[T] #224).docker logs, loses crash logs (Structured JSON logs to stdout + request-id correlation #258)._bucketseries is the useful part.split/disambiguate/rollup/as_ofas advanced — they inflate the tool surface newcomers must hold (Tier the tool/verb surface (advanced) + a one-shot 'capture' macro #281).Full per-domain analysis is captured across the epic issues above; each child issue carries the concrete file:line findings and fix direction.