01
Find anything in plain English.
Postgres full-text over names, metadata, and every word the agent extracted from your PDFs. Relevance-ranked, snippet-highlighted, sub-second on re-index.
⌕indemnity clause
"… shall indemnify and hold harmless the party of the first part …"
02
File by email. One action.
Every workspace gets a unique ingest address. Forward anything to it; attachments become documents with sender, subject, and message-ID preserved as metadata. Extraction fires automatically.
Forward to
docs+4h7xyq8p2r@kodori.ai03
Collections, not folders.
Cabinets, drawers, matters, projects — all views over one metadata layer. A document can live in many contexts without a single duplicate copy.
04
Live "who can see this".
Every document surfaces its access list with reasoning: role-based, creator-implicit, or explicit grant. Deny always wins. Ethical walls that actually hold at retrieval time.
youCreated this document
partners@Tenant owners · role-based
s.chen@Explicit allow · read
05
Nothing is "final_final".
Content-addressable blobs, keyed by SHA-256. Every version is immutable. The current one is unambiguous. Moves are metadata edits — links never break.
06
Audit is a side effect.
Every action appends to a per-tenant hash-chained event log. The compliance officer reviewing activity sees the same log the agent operates against — no parallel audit system.
09:14document.content-extracted
09:13document.created
09:12permission.granted
07
Hybrid search that just works.
Postgres full-text for exact phrases AND vector embeddings for concept matching, fused via Reciprocal Rank Fusion. "agreements about confidentiality" surfaces an NDA even when the word "NDA" never appears.
08
Metadata fills itself.
When a document lands, the agent proposes its sensitivity tier, the right collection, 2–8 search keywords, and a doc type. You confirm. The audit log records the human decision.
09
Versions you can defend.
Upload v2 without making a duplicate record. Label the "Final draft", the "Sent to counsel". Compare any two versions with a server-rendered text diff — even if the older bytes haven't been read in a year.
10
Legal hold, deny-wins.
Bind documents to a matter. Held records refuse to delete, refuse to dispose under retention, refuse to downgrade sensitivity. Subjects stay on the hold record forever as audit evidence.
11
Retention, human-confirmed.
Define classes ("Tax records — 7 years"). Records that elapse appear in a review queue with two buttons: defer with a reason, or dispose with a reason. No one's tax records get auto-deleted at 3 a.m.
12
DLP catches it on the way in.
Every uploaded document is pattern-scanned for SSNs, Luhn-validated credit cards, ABA-validated routing numbers, AWS keys, GitHub tokens, PEM private keys, JWTs. High-confidence matches auto-escalate the doc to "regulated" before it's searchable; lower-confidence findings queue for human review. The matched value is never stored — only a pre-redacted preview ("XXX-XX-1234").
13
Anomaly detection with agent step-up.
A 15-minute cron scans the audit log for high-volume regulated reads, off-hours bursts, hold-deny spikes, agent runaway loops. High-severity AGENT signals auto-pause the offending principal via a deny rule on /permissions; un-pausing requires a written rationale captured on the audit log.
14
First DMS with a public MCP server.
POST /api/mcp speaks the Model Context Protocol over Streamable HTTP. Claude Desktop, Cursor, ChatGPT desktop, and Kodokyo's agent connect with a Kodori API key and call the same 75+ tools the internal agent uses — no custom integration code. Audit-attributable: every external tool call lands on the hash-chained log under the issuing user's identity.
15
REST API + signed webhooks (with Slack Block Kit).
Twelve REST endpoints, opt-in scopes per key, OpenAPI 3.1 manifest, HMAC-SHA256 webhook signatures with 5-minute drift protection. Pick "Slack" as the webhook format and Kodori renders each event as Block Kit at the destination URL — readable channel messages without a translator service in between.
16
Programmable agent. In plain English.
Type a one-line rule on /automations: "Daily at 9am, ask the agent which AP invoices have price variance and email me the answer." Claude compiles it into a typed schedule + action; the cron fires every 5 minutes and runs matching rules. Email saved-search digests + email free-form agent answers in v1. Permission-trimmed — automations run as the creator. The architecture (typed-tool agent + scheduled cron + email + Resend) means programmable agent without writing code; no incumbent has it.
17
Conflicts cleared before the matter exists.
Type a working matter name on /collections/new and Kodori runs the pre-engagement conflict check the firm does by hand today: substring match against existing matter names + a hybrid search of every document in the tenant for the parties you typed. Existing matters where the parties already appear surface inline with snippets — before you click create. Permission-trimmed at the document layer; matter names appear tenant-wide so false negatives don’t cost you an engagement.
18
Voice notes that file themselves.
Hit /capture from the field, record on your phone, the agent transcribes via Whisper and the transcript lands as a document attached to the matter or project you picked. Site walkthrough notes for the project superintendent, deposition reactions for the litigator, voicemail-to-doc for everyone. Audio retained on R2; transcript indexed for hybrid search alongside every other document.
19
Search across Slack, email, and your shared drives — in one query.
Six external connectors live: Slack, Gmail, Outlook, SharePoint, OneDrive, Google Drive. Connect once via OAuth 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 and fuses the results via Reciprocal Rank Fusion — operators ask "find every contract about the Smith deal" and get hits regardless of where the contract actually lives. Tenant-scoped: only authorized connectors contribute. OAuth tokens encrypted at rest (AES-256-GCM, scrypt-derived from AUTH_SECRET, BYO-KMS-extensible). GDPR Article 17 right-to-be-forgotten purge available on /integrations/[id] for revoked connectors.
20
AEC trackers in the language of the trade.
RFI tracker, submittal tracker, change-order tracker, inspection register — extracted automatically from uploaded PDFs by Haiku-driven specialized extractors. Project drill-in at /projects/<ref> rolls up open RFIs, under-review submittals, pending COs with PCO-overdue badging at 14 days, executed CO impact, and a unified per-artifact-color-coded activity timeline. Filter every tracker by project, spec section, status. Built for the GC who today reconciles three spreadsheets every Friday — the trackers ARE the spreadsheets, plus the source documents stay attached.
21
Live in Word, Excel, PowerPoint, Outlook.
Office add-ins surface Kodori inside the apps your team already lives in. Outlook: file an email + attachments to a matter or project in one click. Word / Excel / PowerPoint: search Kodori from the side panel, insert a clause or a contact block, save the current document back to a collection without leaving the app. Single-tenant authentication via the same Auth.js session as the web app — no separate add-in credentials, no IT-side license seat to provision per user.