Drafting Independent solution

Document Drafting Assistant

Generates first drafts from your own approved templates and structured matter intake — contracts, engagement letters, standard filings — with placeholders filled, clauses selected by rules, and every draft routed to a lawyer for review.

The problem

Lawyers spend billable-grade hours on first drafts

Assembling a first draft means hunting for the right template, copying in matter details, and picking clauses by hand. It's slow, error-prone, and rarely the highest use of legal expertise.

This assistant produces a structured first draft from your templates and intake in minutes — clearly marked as a draft for review — so lawyers spend their time on judgement, not assembly.

Primary objective
Cut drafting time on routine documents while keeping a qualified human accountable for every output.
How it works

Intake → select template → assemble draft → lawyer review

Intake
Structured matter details
Template
Select approved template & clauses
Assemble
Fill, tailor, flag open items
Review
Lawyer edits & signs off
What it does
  • ✓ Template-based drafting
  • ✓ Rule-driven clause selection
  • ✓ Placeholder auto-fill
  • ✓ Open-item / TODO flags
  • ✓ Version comparison
  • ✓ Clause library reuse
Built with
  • ✓ Claude over your templates
  • ✓ Document assembly engine
  • ✓ DMS / matter integration
  • ✓ Clause knowledge base
  • ✓ Review & sign-off workflow
Guardrails
  • ✓ Not legal advice — drafts only
  • ✓ Approved templates only
  • ✓ Lawyer sign-off required
  • ✓ Citations to source clauses
  • ✓ Full change audit trail
Under the hood

Template-grounded assembly with open-item flags

Drafting is constrained to your approved template and clause library; anything the intake doesn't cover is flagged for a human rather than invented.

drafting/assemble.py PYTHON
from anthropic import Anthropic
from library import load_template, clause_bank
client = Anthropic()

def draft(matter: dict, template_id: str) -> dict:
    tpl = load_template(template_id)          # firm-approved only
    prompt = f"""Fill this template from the matter data.
Template: {tpl.body}
Matter: {matter}
Use ONLY clauses from: {clause_bank(tpl.practice)}
Flag anything unspecified as [REVIEW]. Do not invent terms."""
    msg = client.messages.create(model="claude-sonnet-4-20250514",
        max_tokens=2000, temperature=0,
        messages=[{"role": "user", "content": prompt}])
    return to_review(matter, msg.content[0].text)  # lawyer signs off
Outcomes
Hours→min
On routine drafts
Consistent
Template compliance
Flagged
Open items surfaced
Human
Sign-off required

Start every document from a solid first draft

Pairs with Contract Review to draft and then pressure-test terms.

Start a conversation →
More Legal & Professional Services solutions
Document Drafting Assistant | Smort