The part everyone underestimates
That context is also the hardest thing to build — which is why most firms that reach for it never finish. If you've spent a weekend wiring Claude to your Slack and your Drive, you already know the easy 80%: pull some documents, embed them, drop them in a vector database, retrieve the nearest matches, stuff them into a prompt. It works in a demo. It's also where most internal projects quietly stall — because a retrieval toy and an owned, compounding context layer are different things, and the difference is the 20% nobody demos.
That 20% is four problems: capturing context from where work actually happens, formalizing it into a structure that means something, retrieving it without drowning in your own stale history, and owning it so the asset is yours and not a vendor's. Here's how Aether solves each.
1. Capture: meet the work where it already lives
Context doesn't live in a knowledge base someone remembers to update. It lives in the firm's everyday work — Slack threads, email, documents, calendar, the task tracker, meeting debriefs. So Aether ingests from there directly.
Today that means connectors for Slack, Gmail, Google Drive, Outlook, OneDrive, Google/Outlook Calendar, and the major task tools (Asana, ClickUp, Todoist, Linear), plus manual upload (PDF, Word, Excel, PowerPoint, Markdown) and URLs. Where a provider supports it — Slack, Gmail, Drive, and the task tools — ingestion is push/webhook in near-real-time, backstopped by a scheduled poll; the rest sync on a schedule. Call transcripts enter today via upload or the debrief agent rather than a recording integration (a native recorder is on the roadmap, not shipped).
Every source, whatever its shape, normalizes into one document corpus tagged by origin. That normalization is unglamorous and it's the foundation: it's what lets a single question draw on an email, a Slack decision, and a deck at once.
Capture in the product: every connected source converging into one normalized, origin-tagged corpus.
2. Formalize: a consulting data model, not a document pile
This is the first real divergence from a generic RAG project. A pile of embedded documents has no idea what a client is, or an engagement, or a decision. Aether's data model does: firm → clients → engagements → contacts → decisions, with documents and their extracted signal hung off that spine.
Turning that raw material into structure is an active, model-driven loop, not a passive store:
- ▸Entity extraction pulls the people out of the corpus — client-side contacts and their mentions — so “who said this, about whom” is queryable, not buried in prose.
- ▸Stakeholder typing classifies each contact's role on an engagement — champion, sponsor, decision-maker, influencer, detractor, new arrival — with an influence score. Roles are AI-inferred with an explicit confidence level and a sticky manual override; low-signal contacts are left unknown rather than guessed at.
- ▸Decision capture records decisions with their rationale and, on a schedule, re-checks whether each one held, reversed, or drifted.
The point: the firm's memory becomes structured — you can ask about an engagement, a stakeholder, or a decision as first-class things, because the system has formalized them as first-class things.
Stakeholder typing in the product: each contact classified by role and influence, with low-signal people left 'unknown' rather than guessed.
3. Retrieve without rot: the layer that separates memory from a junk drawer
Retrieval is where the weekend project ages badly. A firm accumulates years of overlapping, contradicting, superseded material. Naive nearest-neighbor search over that surfaces the loudest match, not the current truth — and gets worse, not better, as you add history. The whole promise of context — that it compounds — inverts.
Aether's retrieval is built to get better with volume, not worse:
- ▸Semantic search over embeddings from a managed model (such as Voyage), stored in a Postgres vector index (such as pgvector) on an HNSW cosine index — chunked along document structure so a retrieved passage is a coherent unit, not a fragment.
- ▸A curation layer sits on top of every document: a retrieval weight that down-ranks stale or low-value material at query time, a staleness signal, supersedes links (this proposal replaced that one), and contradiction flags (this Slack message conflicts with that doc). Retrieval score = similarity × curation weight, so superseded and stale context fades instead of resurfacing.
- ▸Decisions get their own index, so “have we decided something like this before?” is a first-class query.
Retrieval that improves with history
Query
“Where do we stand on Acme’s pricing?”
scored: similarity × curation weight
Current pricing memo
Live SOW v3
Old proposal
superseded2023 rate sheet
staleContradicted Slack note
contradictedNaive retrieval surfaces the loudest match; curated retrieval surfaces the current truth — the same query, with the junk drawer suppressed.
On top of the structured record, Aether computes a knowledge graph — clients, documents, firm members, and contacts as nodes; relationships like worked-on, similar-to, supersedes, contradicts, and mentioned-inas edges. It's a live projection over the structured tables — a reasoning and visualization layer over the record, not a separate graph database. It's what turns “find me documents” into “show me how this client, these people, and these decisions actually connect.”
This curation layer is the unsexy core of the moat. It's the difference between a system that remembers more usefully every month and one that just remembers more.