Matter-centric collections — with default sensitivity + retention inheritance
Cabinets, drawers, matters — pick the kind that matches your firm's vocabulary. A document can sit in many matters without a duplicate copy of the bytes. Configure default sensitivity and / or default retention class on a matter once: every doc filed there inherits automatically. Sensitivity is highest-tier-wins (a regulated PII doc dropped into a confidential matter stays regulated; an internal doc dropped into a regulated matter escalates to regulated). Retention is no-override (a doc with an existing 7-year retention won't silently shorten because someone moved it into a 3-year matter). Tell the agent in plain English: "set the Acme Corp matter to confidential and 7-year retention" and the rules apply on every future filing.
Ethical walls enforced at retrieval
Permission rules apply inside the SQL query, not after. A walled-off attorney never sees a search hit, a dashboard count, or an API result for a matter they're screened from. Deny rules always beat allow rules.
Legal hold with subject-preservation
Bind documents to a matter; held records refuse to delete and refuse to downgrade sensitivity. Subjects remain on the hold record after release as audit evidence — you can prove which documents were in scope and when.
Office add-ins (Outlook + Word + Excel + PowerPoint)
All four task panes ship today — sideload via /office. Outlook files email + attachments from the ribbon with thread tracker, sensitivity override, and matter picker. Word + Excel + PowerPoint save as new doc OR new version with optional version label ("Final draft", "Sent to counsel"). One Kodori API key signs into all four.
Email filing — with or without the add-in
Each tenant also has an unguessable ingest address (docs+<slug>@kodori.ai). Forward correspondence from any client or device — the agent auto-classifies sensitivity, suggests a matter, and proposes keywords. Useful for mobile, personal Gmail, or non-M365 clients.
TIFF, HEIC, and the formats that matter for legal
CM/ECF still emits TIFFs from older districts. Court fax-scan deliveries are usually multi-page TIFF. Paralegals capturing exhibits at the courthouse on an iPhone get HEIC by default. Kodori reads all of them — single-page TIFFs and iPhone HEICs decode locally to PNG, multi-page TIFF fax-scans (typically 5-50 pages) wrap into a PDF and route through Claude vision in one call. No Azure or Google Document AI provisioning required to make a fresh tenant work with court bytes; cloud OCR remains the cheaper / higher-accuracy path when configured for high-volume scanned-record workloads.
Word-style redline compare, built-in
Compare any two versions of a document on /doc/[id]/compare with word-level inline redline (insertions in green, deletions in red strikethrough) — the "Track Changes" reading legal reviewers expect. No Litera license, no Word plugin, no third-party software. Mode toggle for unified line-level view when a document is structured data.
AI document generation from your firm's templates
Use any document with extracted text as a structural template — your firm's standard NDA, your engagement letter, your subpoena response template. Type instructions ("Draft a 1-year mutual NDA between Acme and BigCo, NY law"), Claude Opus drafts a new document preserving the template's structure but adapting context. Bracketed placeholders flag values for human review. Markdown output pastes into Word with formatting preserved.
Hybrid search that handles a long brief
FTS for case numbers, citations, and party names; embeddings for conceptual phrases ("agreements about confidentiality" surfaces an NDA even when the word "NDA" never appears). Reciprocal Rank Fusion combines both.
Hash-chained audit trail
Per-tenant, tamper-evident, the same log the agent acts against. Substrate underneath SOC 2 Type II, 21 CFR Part 11-capable, FRCP-ready. No parallel audit system to maintain.
Smart automations — programmable agent in plain English
Type a one-line rule on /automations. "Every Monday at 8am, run my 'unfilled retention' saved search and email me the new hits" works as written. "Daily at 9am, ask the agent which contracts are expiring this month and email me the answer" works. "Every 4 hours, ask the agent which matters have new client correspondence and email partner@firm.com" works. Claude Opus compiles each rule into a typed schedule + action; an Inngest cron tick fires every 5 minutes and runs your matching rules. Programmable agent without writing code — no incumbent has the architecture (typed-tool agent + scheduled cron + email infra) to ship this. Permission-trimmed end-to-end.
Semantic legal-hold scoping
Describe what the matter is about — "correspondence about staircase rebuild safety findings", "any drafts of the BigCo merger NDA" — and Kodori runs hybrid search to surface candidate documents. Mark unbound matches in one click; already-bound docs show with an "already bound" badge. The agent can drive the same flow from natural language and always asks for approval before binding.
Check-in / check-out for matter drafts
Claim a soft edit lock before opening a draft brief. While the lock is held, no other associate can upload a competing new version — the system surfaces "Held by alice@…" instead. Uploading clears the lock atomically. Partner / admin can force-release a stuck lock; every state transition lands on the audit log.
Citation extraction on every legal document
Click "Extract citations" on any document and Kodori scans the extracted text for cases (Brown v. Board, 347 U.S. 483 (1954) — against a curated list of 30+ reporters), statutes (28 U.S.C. § 1331), regulations (29 C.F.R. § 1910.146), procedural rules (Fed. R. Civ. P. 26(b)(1)), evidence rules (Fed. R. Evid. 803(6)), federal dockets (No. 21-cv-1234), and constitutional clauses (U.S. Const. amend. XIV, § 1). Repeat appearances collapse into one row with × N occurrences. Idempotent on re-run after a new version uploads. The extractor favors precision over recall — a citation index with 30 real and 0 noise beats 30 real and 8 noise. Citation pulls land on the audit log alongside every other matter event.
Citation alerts — email when a new doc cites a tracked authority
Subscribe a citation at /citations/alerts and Kodori sends an email every time a new doc in the workspace cites it. Substring match catches parenthetical references; optional kind filter (cases / statutes / regulations / dockets / FRCP / FRE / constitutional). Permission-trimmed: alerts only fire for docs the subscriber can read. Pause / resume per alert; full audit trail of every fire. Subscribe the authorities you're tracking in active matters and Kodori pings you the moment opposing counsel's next brief lands citing them.
Per-matter citation rollup
Once each brief in a matter has been run through the extractor, /collections/[id]/citations aggregates the index across every readable doc pinned to the matter. Group key is (kind, normalized) so the same case appearing in five briefs collapses to one row showing total occurrences across the matter + per-doc occurrence breakdown. Ranked by total occurrences. Filter chips for the seven kinds. Permission-trimmed: a screened attorney sees no citations from matters they're walled off from. Answers "what does this matter rely on?" in one screen.
Threaded annotations + @mentions on every document
Notes thread one level deep on every document — root + replies in a clean indent. Tag a partner with @their.email@firm.com and Kodori sends them a notification with a deep link to the thread. Mark a thread "Resolved" when the question's answered (author, anyone @mentioned, or workspace admin can resolve and reopen). Resolution lives on the audit timeline so deposition prep can reconstruct the conversation around a record alongside the record itself. Permission-trimmed to the document's readers — a screened attorney never sees the thread.
Agent activity oversight
Managing partners can answer "what did the AI do this week?" in one click — /agent-activity shows every action the agent has taken in the last 30 days, scoped by tool and document. No audit-filter syntax to learn. Useful for partner-level oversight when associates start using AI heavily.
Recognizes legal record types on sight
Kodori's pre-trained pattern matcher recognizes NDAs, engagement letters, master services agreements, discovery letters, subpoenas, and court filings before any LLM call runs. Unambiguous documents tag consistently across the corpus.
DLP catches inadvertent PII / PHI in client uploads
Every uploaded document is pattern-scanned for SSNs, Luhn-validated credit-card numbers, MRN-prefixed identifiers, and credentials. High-confidence findings auto-escalate sensitivity to "regulated" before the document is searchable — keeps a partner from seeing privileged client data sitting at "internal" because the upload form left it at the default.
Retention auto-apply rules for matter records
Map "engagement letter" → 10-year hold, "discovery" → 7-year per-jurisdiction, "subpoena" → matter-life-plus-3 once and Kodori auto-suggests the right class for every new matter document. Acceptance is human; the rule just removes the "every upload needs a manual retention pick" tax that gets skipped under deadline pressure.
Public share links for external delivery at /share-links
Generate a tokenized read-only URL for any document, collection, or recorded production. Recipient (opposing counsel, court, government agency) hits the URL — no Kodori account required — and sees a clean download view. Token is 32 bytes of crypto randomness; only the SHA-256 hash is stored. Default 14-day expiration; max 90. Every access bumps an access counter + emits a hash-chained audit event so chain-of-custody captures who saw what when. Production-source links serve the EXACT bytes recorded at production time even after later re-stamps. Revocable instantly. Replaces "zip the binder + Dropbox link + hope they got it" with a single audit-defensible URL.
Matter binder export at /matter-binder
Pick a source — collection or production — and click Build. Kodori merges every PDF into a single binder with a cover page (matter name + doc count + Bates range), a table of contents with each doc's Bates BEG/END + page count, and the docs themselves in alphabetical order. Replaces the "drag every PDF into Acrobat and run Combine" pre-production workflow with one click. Production-sourced binders preserve the EXACT bytes that were originally produced, even after later re-stamps on the same docs.
Production set tracker at /productions
Every Bates batch becomes a production record with recipient, date, Bates range, and the EXACT version hash of every doc delivered (so a later re-stamp doesn't retroactively change what the production says was produced). Click "Record as production" on the Bates-stamp result table after a batch — type recipient + matter ref + notes, click Record. The production lands on /productions; per-prod drill-in shows per-doc Bates BEG/END + page count + version hash with "archived" badges when the current doc version diverges from the produced one. recordProduction is an MCP tool — automations can record productions on trigger; external clients can script productions. Closes the partner-asked question "what did we produce on Jan 15 to opposing counsel?" in seconds.
Bates stamping batch for production at /bates-stamp
Pick a source — collection or saved search — set a Bates prefix and start number, click Stamp. Kodori loads each PDF in alphabetical order, stamps the bottom-right of every page with a sequential Bates number, and saves each result as a new immutable document version. Each doc gets a contiguous BEG-END range; the privilege log's BEG numbers (built with the same prefix + start) match the produced PDFs' starting Bates exactly. Audit log captures every stamp event with the prefix/beg/end/pageCount metadata. Replaces the standard "open in Acrobat, run a Bates plugin, re-upload" production loop with one click that stays inside the firm's evidentiary system.
PDF redaction tool for partially-privileged production at /doc/[id]/redact
Open any live PDF, click Redact. PDF.js renders each page with a transparent overlay where you click-and-drag rectangles. Each box persists immediately as a pending overlay (mutable). When ready, click "Burn redactions to new version" — pdf-lib rasterizes opaque black rectangles onto the bytes, flattens, and creates a new immutable document version. The original version is preserved in version history; the audit log captures every add / remove / burn event with the full box list as payload so chain-of-custody is intact. Coordinates are stored in PDF user-space units, not client pixels, so re-renders at any zoom align. Pairs with the privilege log builder for the discovery production workflow.
Conflict checking on matter creation at /collections/new
When you open a new matter, Kodori runs a debounced hybrid search across existing matters as you type and surfaces potential conflicts inline. Two-pass detection: name-match against existing collection names + document-match (hybrid search on the description, mapping each hit back to its collection memberships). Amber warning panel with click-through to suspect matters and per-doc snippets explaining the link. Submit button refuses until you explicitly confirm "proceed anyway." Replaces the manual paralegal-runs-conflict-search pre-engagement step every firm does today.
Privilege log builder for discovery production at /privilege-log
Pick a source — collection OR saved search — and click Build. Kodori generates an FRCP-26-compliant privilege log: auto-sequenced Bates numbers, classified privilege basis (Attorney-Client / Work Product / Common Interest / Joint Defense / Settlement / Not Privileged / Unable to Determine), and a 1-2 sentence FRCP-26-style description per row that names subject + parties + date without reproducing privileged content. Permission-trimmed before classification. Per-row inline editing with persistent overrides — Bates / basis / description edits persist per (source, document) so re-builds preserve corrections without re-classifying. Markdown export pastes cleanly into Word, ECF filings, and production cover letters. Replaces the ~8-12 hour senior-paralegal workflow standard on every production.
External connectors — search the matter across your firm's Slack, Outlook, and SharePoint
Connect Slack workspaces, Microsoft 365 mail + SharePoint + OneDrive, or Google Workspace from /integrations. Messages and file attachments index into the same FTS + pgvector retrieval the rest of Kodori uses. The agent's `unifiedSearch` tool fires Kodori-document search + connector-content search in parallel — partners ask "find every reference to the Brennan staircase incident" and get hits from internal documents AND the Slack thread where associates first discussed it AND the email thread where opposing counsel raised it. OAuth tokens encrypted at rest (AES-256-GCM, scrypt-derived from AUTH_SECRET, BYO-KMS-extensible). Tenant-scoped. GDPR Article 17 right-to-be-forgotten purge available when a representation ends and the client requests their content deleted. The "did we discuss this in Slack three months ago?" question stops requiring three people to pause what they're doing.