Custos turns tabular review cells into an auditable, multi-model bake-off

Every cell in a tabular review now remembers what produced it - and lets you re-run the same question against a different model on the spot.

contract-reviewdiscovery

On Custos's fork, the tabular review grid is no longer a one-shot overwrite. Each cell keeps a history of every value it has held, along with the model and prompts that produced it. Reviewers can re-run a selected batch of rows rather than regenerating the whole table, and open a per-cell history panel to see exactly how an answer evolved.

The more interesting move is the per-cell model playground. From inside a single cell, a reviewer can fire the same question at Claude, Gemini or Grok and stack the answers side by side in the history - useful when one model is hedging and you want a second opinion without rebuilding the whole review.

So what For anyone using LLM-driven tabular review on contracts or discovery, this is the audit trail and the model-comparison workflow regulators and risk committees keep asking about.

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
ce6e9c27 Tabular: run on selected rows + version history with model & prompts Custos 2026-05-04 ↗ GitHub
commit body
- New tabular_cell_versions table archives prior cell state (content, model,
  system_prompt, column_prompt) on every overwrite.
- tabular_cells gains model/system_prompt/column_prompt/updated_at columns
  capturing what produced the current content.
- POST /tabular-review/:id/generate accepts optional document_ids; when
  provided, those rows force-rerun and prior values are archived.
- POST /tabular-review/:id/regenerate-cell archives prior content first.
- New GET /tabular-review/:id/cells/:cellId/versions returns history.
- Frontend: 'Run selected (N)' button appears in the header when rows are
  checked, posts document_ids to the streaming endpoint.
- .env.example: add XAI_API_KEY and R2_REGION.
c2471472 Tabular: cell history modal - view archived versions, models, prompts Custos 2026-05-04 ↗ GitHub
1f3d4cb9 Multi-model comparison from cell history modal Custos 2026-05-04 ↗ GitHub
commit body
- /regenerate-cell now accepts an optional model param that overrides the
  user's tabular_model for that one run; the new content is saved with
  that model id, prior content archived as usual.
- regenerateTabularCell(reviewId, docId, colIdx, model?) on the client.
- Cell history modal: a 'Run on ...' row of model pills in the header lets
  you re-run the same cell against any other supported model (Claude,
  Gemini, Grok). Each run appears as a new history entry, so you can
  click between versions to compare. The current model is disabled.

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-47.md from inside the repo you want the changes in.

⬇ Download capture-thread-47.md