Custos turns every contract into a row of facts you can actually read

A new Key Terms panel pulls the seven things lawyers actually look for out of every uploaded contract - and tracks how they change on re-upload.

contract-reviewanalytics

Custos's fork now extracts a structured snapshot from each contract: effective date, term length, total value, currency, auto-renewal, notice period, and governing law. Each upload gets its own row, so when a contract is re-uploaded after a redline, the panel shows the new version alongside the old one with percentage deltas on the numbers that moved.

The schema is opinionated but pragmatic - seven columns that cover most of what reviewers flag at a glance, with money stored in minor units so it can be charted later (no chart ships yet). Extraction runs in the background so uploads stay fast. The trade-off: failures are silent, and the delta math is fragile when a field flips from blank to filled, so anyone importing this should plan to harden the edges.

So what Anyone building contract-review tooling should look here - it's a clean answer to "what do you actually want to see when a contract lands on your desk?"

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

3 commits from Custos/legalos, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
b4c38597 Lifecycle: extract & display structured contract facts Custos 2026-05-04 ↗ GitHub
commit body
- New contract_facts table tracks effective_date, term_months, total_value
  (in minor units), currency, auto_renew, notice_days, governing_law per
  document version. Re-uploads/renewals add new rows so changes can be
  charted later.
- New lib/contractFacts.ts: maybeExtractContractFacts() runs an LLM call
  on uploaded text and inserts a row keyed to the doc's current version.
  Fires fire-and-forget alongside counterparty extraction; never blocks.
- GET /projects/:id/facts returns rows sorted newest-first.
- New KeyTermsPanel on the project documents tab (collapsible, default
  open) renders the rows as a compact table with formatted money/term/dates.
c2c2a147 Lifecycle deltas: % change vs prior version in Key Terms Custos 2026-05-04 ↗ GitHub
59760a0d Re-extract contract facts on each new document version Custos 2026-05-04 ↗ GitHub

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-46.md from inside the repo you want the changes in.

⬇ Download capture-thread-46.md