acilox / solutions / casewise
⚖️ AI Copilots & Automations

Casewise

Legal client-intake and matter-triage agent that qualifies a lead, runs a recall-first conflict check, tracks the statute-of-limitations clock from a content-hashed rule pack, and books or routes the matter — with every outbound gated on a TCPA consent ledger so the firm never contacts anyone without provable permission.

100%
Conflict recall
0
Consent violations
100%
SOL determinations correct
<60s
Demo to value, no API keys

Why this exists

For a small or mid-size law firm — personal injury, immigration, family — intake is both the growth engine and the liability surface. Speed-to-lead decides who signs the client, but the same intake motion carries three ways to get a partner in real trouble: contacting someone without the consent TCPA requires, taking a matter that conflicts with an existing client, or letting a statute-of-limitations deadline lapse. Generic intake bots optimise for booking the consult and ignore all three. Casewise treats them as first-class: it qualifies the lead into a practice-area tier with cited reasons, runs a recall-first conflict check that would rather flag a namesake for review than miss a real adverse party, computes the SOL status from a versioned rule pack, and gates every single outbound message on a consent ledger — so the firm moves fast *and* stays defensible. A missed conflict here is the ethical analog of an AML false negative: the error the system is built to make unreachable.

How it's wired together

intake

auto

hitl

any hit

web form

call

referral

consent gate
TCPA ledger
no contact without proof

qualify
practice area · tier
whole-word scoring

conflict check
token/alias Jaccard + fuzzy
recall-first

SOL clock
content-hashed rule pack

MatterScope
typed contract
practice area · tier · conflict
SOL status · consent · confidence

policy engine
first-match-wins

book consult
consent-gated send

attorney review
conflict · nurture · decline

audit log
hash-chained + rule-pack hash

Casewise architecture overview

How it works, end-to-end

  1. Consent-gated from the first message

    Every outbound — SMS, email, call — passes through a TCPA consent ledger; without a recorded, still-valid consent event the send is blocked. Consent replay is ordered and applies grants and revocations last-write-wins, so a revoked consent actually stops contact rather than being silently ignored.

  2. Cited tier scoring with whole-word signals

    A transparent scorer qualifies the lead into a practice area and tier, and every driver is matched on whole-word boundaries so 'high' never fires inside 'highway' and 'clear' never inside 'unclear'. The qualified-practice-area bump is scoped to the areas it actually applies to, so a vague lead doesn't get propped into a higher tier than its facts support.

  3. A recall-first conflict check

    The matcher runs two channels — token and alias Jaccard, plus an arity-gated per-token fuzzy pass (same token count, each pair clearing a fuzzy floor) that corrects same-length typos like 'Continental Freght' → 'Continental Freight' but can't match a bare given name to a full name. Single-letter initials are preserved so 'Jane W.' doesn't collapse to 'Jane' and hit every Jane. Any hit routes to attorney review.

  4. A deterministic, content-hashed SOL clock

    The statute-of-limitations engine is a versioned rule pack per jurisdiction × practice area, content-hashed so the exact rules that produced a determination are provable. It classifies each matter as clear, expiring, or lapsed with zero tolerance for a wrong call, and surfaces the rule-pack version and hash on the Sources page.

  5. Typed MatterScope, policy routing, and hash-chained audit

    Everything the agent decides lands in one typed MatterScope — practice area, tier, conflict result, SOL status, consent state, confidence — routed by a first-match-wins policy to book, decline, nurture, or review. Every decision writes a SHA-256 hash-chained audit row alongside the SOL rule-pack hash, and a read-only MCP server exposes leads, the MatterScope, the conflict check, the consent ledger, the SOL status, and the party index. Run it with `casewise mcp`.

The choices that matter

Decision

Conflict recall is earned, and false hits are gated at zero

A single exact-match test proves nothing. The corpus mixes an alias hit, a same-length typo hit, a namesake near-miss, and a given-name near-miss; the eval reports the separation margin between the weakest true conflict and the strongest clear lead and gates false conflict hits at zero. The check is the moral core — a missed conflict is an ethics violation — so recall comes first.

A two-channel matcher with an adversarial corpus is more than a string compare. That's the cost of a conflict check a partner can rely on.

Decision

No contact without provable consent

Every outbound is gated on the consent ledger, and revocations are applied on replay — the send path fails closed. TCPA damages are per-message and statutory; the safe default is silence until consent is proven, not the reverse.

Fail-closed consent means a genuinely-consented lead can be held if the record is incomplete. Cheaper than a class action.

Decision

The SOL rules are versioned data, not buried constants

Jurisdiction × practice-area deadlines live in a content-hashed rule pack whose version and hash are stamped into the audit and shown on Sources. A firm can prove which rules ran, and updating a limitations period is a reviewed data change, not a code edit.

A hashed rule pack is more ceremony than inline numbers. Defensibility is the deliverable.

Decision

Mock-first, deterministic, one corpus for demo and eval

A transparently-heuristic classifier, deterministic embeddings, and a single labelled corpus that seeds both the demo and the ground truth let the whole platform run in under a minute with no API keys — and the showcase and backtest can never drift apart.

Heuristic scoring trails a frontier model until a key is set. It locks the shape and makes the run reproducible for any evaluator.

Built on

Python 3.12FastAPI · UvicornSQLAlchemy 2.0 · AlembicPostgreSQL 16 · pgvectorRedis · RQPydantic v2 · structlogHTMX · Jinja2PyYAML · SHA-256 content hashingAnthropic SDK · sentence-transformers