Harvey has released Harvey Tenet, its first post-trained model, as a research preview as of today. Tenet is a Kimi K3 base post-trained with Fireworks through asynchronous reinforcement learning on long-horizon legal work. The training corpus combined synthetic data, publicly available legal data, and human expert data. Harvey states no customer data was used. Against the base K3 model, Tenet completes almost twice as many held-out tasks on Harvey’s Legal Agent Benchmark (LAB) and 20% more on LAB: Contracts, raising all-pass rate by 9 and 2 percentage points respectively. Harvey reports state-of-the-art on LAB: Contracts and second place on LAB. The gains also transferred, untrained, to Mercor’s APEX Agents and Crosby’s Redline Bench. The stated goal is twofold: build frontier legal intelligence on open-weight models, and give law firms a path to own their own specialized models.
Is it deployable?
Not yet, Harvey Tenet is a research preview announced on August 20, 2026. Harvey has not published weights, a model card, or an API endpoint. The base model is open-weight; Tenet itself is Harvey’s own checkpoint, and the company says the work will move “from research to production” inside Harvey’s products over time. What ships today is the recipe, not the artifact.
- Company tier: Enterprise only. Access runs through Harvey’s platform, which is sold to law firms, mid-sized firms, and in-house legal teams. A lab with an RL stack could reproduce the method; training used roughly 150 NVIDIA B300 GPUs over two months.
- Industries: Legal services, corporate in-house legal, private equity and investment banking (M&A diligence), plus regulated sectors where contract volume drives cost — insurance, financial services, healthcare, energy.
- Applications: M&A due diligence memos over datarooms, contract drafting, review and redlining, structured extraction across up to 10,000 documents, and precedent search over a firm’s accumulated knowledge.
What the numbers say
Against the base K3 model, Tenet completes almost twice as many held-out tasks on Harvey’s Legal Agent Benchmark (LAB) and 20% more on LAB: Contracts, lifting all-pass rate by 9 and 2 percentage points respectively. Harvey reports state-of-the-art on LAB: Contracts and second place on LAB, using base-model scores from Vals.
The more interesting result is transfer. Tenet also improves substantially on Mercor’s APEX Agents (corporate law) and Crosby’s Redline Bench — neither seen during training — while holding performance on knowledge benchmarks including LegalBench, CUAD, MAUD, and Scale’s PRBench. Agentic training did not erode textbook legal reasoning.
Cost is co-optimized rather than traded away. Open weights lower price per token; reward shaping that prefers shorter trajectories at equal quality lowers tokens consumed. Harvey reports significant quality gains at stable cost.
How it was trained
Training used asynchronous reinforcement learning in sandboxed legal environments built like LAB tasks: a partner-style instruction averaging about 50 words, a client matter of key and peripheral documents, and an expert rubric of atomic pass/fail criteria — roughly 50 per task, hundreds at the extreme. A single rollout can exceed 1,000 turns.
Rollouts are graded by LLM-as-a-judge; ablations settled on Kimi 2.6. Reward combines the fraction of rubric criteria satisfied, a holistic count of legal issues solved, and an all-pass bonus. The policy is optimized with GSPO using a rank-64 LoRA over the full K3 network, eight task groups of eight rollouts per optimizer step, across ~1,750 environments and >10,000 rollouts per epoch. Fireworks co-built trainer and rollout deployments at the kernel level, with token-in-token-out and router replay, to keep a large MoE numerically aligned across training and inference.
‘+c.t+’
‘+c.s+’
‘; b.addEventListener(‘click’,function(){pickCard(i)});cardBox.appendChild(b); }); function pickCard(i){cur3=i; cardBox.querySelectorAll(‘.tn-card’).forEach(function(x,j){x.classList.toggle(‘on’,j===i)}); draw(caps[i].rows,’tnRows3′); root.querySelector(‘#tnCap3′).textContent=caps[i].c; } /* ———- RL loop ———- */ var S=[ {t:’The partner request’,d:’Each environment opens with a short instruction written the way a partner asks for work, not as a specification of the output.’,f:’Instructions average about 50 words’,v:’brief’}, {t:’The client matter’,d:’A closed-universe set of matter files mixes key and peripheral documents, with the legal issues spread across several of them.’,f:’The agent must build context before it can answer’,v:’docs’}, {t:’The sandboxed workspace’,d:’The agent starts in a sandbox holding the matter files plus tools to search the matter, read documents, and draft work product.’,f:’Search \u00B7 read \u00B7 draft \u00B7 write to disk’,v:’tools’}, {t:’The rollout’,d:’The agent works the matter turn by turn, then writes its final deliverables to disk, which ends the episode.’,f:’A single rollout can span more than 1,000 turns’,v:’walk’}, {t:’The expert rubric’,d:’An LLM judge scores the deliverables against atomic pass or fail criteria: facts, conclusions, citations, severity ratings, recommendations, formatting.’,f:’About 50 criteria per task; the largest have hundreds’,v:’grid’}, {t:’The reward’,d:’Reward is a weighted sum of the fraction of criteria satisfied and a holistic count of legal issues solved, plus a bonus for a perfect score.’,f:’Kimi 2.6 was chosen as the judge after ablations’,v:’reward’}, {t:’The policy update’,d:’Group-sequence policy optimization scores a group of rollouts per task and normalizes advantages within the group. Near-tied groups are rejudged; a length term favors concise deliverables.’,f:’GSPO with a rank-64 LoRA over the full K3 network’,v:’update’}, {t:’The hot reload’,d:’Rollouts and the trainer run in an asynchronous loop. After each optimizer step, new weights load into the live deployments in place, so generation rarely stops.’,f:’\u2248150 NVIDIA B300 GPUs over two months’,v:’loop’} ]; var stepBox=root.querySelector(‘#tnSteps’),cur=0,timer=null; S.forEach(function(s,i){ var li=document.createElement(‘li’); var b=document.createElement(‘button’);b.className=”tn-step”+(i===0?’ on’:”); b.innerHTML=’‘+String(i+1).padStart(2,’0′)+’‘+s.t+’‘; b.addEventListener(‘click’,function(){stop();show(i);mark(i)}); li.appendChild(b);stepBox.appendChild(li); }); function mark(i){stepBox.querySelectorAll(‘.tn-step’).forEach(function(x,j){ x.classList.toggle(‘on’,j===i);x.classList.toggle(‘done’,j‘+inner+’‘} function art(k){ var o=”,i; if(k===’brief’){ o=’

















