Research Independent solution

Legal Research Assistant

A retrieval-grounded assistant over your firm's memos, precedents and permitted research sources: it answers questions with citations to the underlying documents, and declines when it can't ground an answer — no confident guessing.

The problem

The firm's best knowledge is locked in past work nobody can find

Answers often already exist in a prior memo, brief or precedent — but finding them means knowing they exist and where. So work gets redone, and juniors reinvent what the firm already knows.

This assistant searches your knowledge base and permitted sources, and answers with citations you can open and verify — refusing to answer when the grounding isn't there.

Primary objective
Get to the right precedent and prior work fast, with a citation behind every statement.
How it works

Question → retrieve sources → synthesise → cite & verify

Question
Natural-language research query
Retrieve
Memos, precedents, permitted sources
Synthesise
Grounded answer, no guessing
Cite
Open & verify every source
What it does
  • ✓ RAG over firm knowledge
  • ✓ Citation on every claim
  • ✓ Precedent & memo retrieval
  • ✓ Refuses when ungrounded
  • ✓ Follow-up & drill-down
  • ✓ Jurisdiction filtering
Built with
  • ✓ Claude with retrieval
  • ✓ Vector store over your DMS
  • ✓ Permitted-source connectors
  • ✓ Citation & passage linking
  • ✓ Access-control aware
Guardrails
  • ✓ Not legal advice — research aid
  • ✓ No answer without a source
  • ✓ Respects matter permissions
  • ✓ Confidence surfaced
  • ✓ Query & access audit log
Under the hood

Answer only when grounded

Retrieved passages are the only allowed evidence; if nothing relevant is found, the assistant says so instead of fabricating authority.

research/answer.py PYTHON
from anthropic import Anthropic
from kb import retrieve
client = Anthropic()

def answer(question: str, user: dict) -> dict:
    docs = retrieve(question, acl=user["permissions"])   # access-aware
    if not docs:
        return {"answer": "No grounded source found.", "cites": []}
    prompt = f"""Answer using ONLY these sources. Cite each claim as [n].
Sources: {docs}
Question: {question}
If the sources do not answer it, say so."""
    msg = client.messages.create(model="claude-sonnet-4-20250514",
        max_tokens=900, temperature=0,
        messages=[{"role": "user", "content": prompt}])
    return with_citations(msg.content[0].text, docs)
Outcomes
Cited
Every statement
Faster
To the right precedent
Refuses
When ungrounded
Access
Permission-aware

Find what the firm already knows

Feeds Document Drafting and Contract Review with grounded precedent.

Start a conversation →
More Legal & Professional Services solutions
Legal Research Assistant | Smort