Client Contract Draft Kit
Turn the actual deal into an editable negotiation pack: service agreement, SOW, change order and a short decisions register. The full ZIP includes original document templates, a consistency checker and a focused legal research guide. Python 3.10+ runs the checker without dependencies. These are working drafts for the relevant parties and qualified counsel to review; do not describe them as enforceable, approved or ready to sign while material issues remain.
Establish the deal
Start with intake.json. Its empty strings are intentionally unresolved. intake.example.json demonstrates deliverable and milestone fields using fictional parties, with legal decisions deliberately left open. Capture legal party names and addresses, engagement type (business or consumer), countries and state/province, service location, proposed governing law/forum, currency, tax treatment, scope, exclusions, deliverable acceptance, dependencies, milestones and commercial terms. Distinguish what the client has agreed from the user's negotiating position. Mark disputed terms and their evidence; a proposal is not acceptance.
Read drafting decisions before handling IP, liability, cancellation, signatures or cross-border terms. Research current primary authority for the actual jurisdiction using the included source starting points. If jurisdiction is missing, draft the commercial sections with [DECISION: ...] markers and explain which legal sections depend on it. Do not select a convenient jurisdiction, invent a registration number, infer signatory authority or silently choose liability caps.
Produce connected drafts
Use service agreement, SOW and change order. Adapt scope to the user: omit the change-order draft if it is not useful. Keep background tools, bespoke deliverables and third-party materials separate. Give each deliverable objective acceptance evidence, a review period and an explicit unresolved decision about silence; do not add deemed acceptance by default. Separate payment due dates from delivery targets and ownership-transfer triggers.
Record each unresolved or conflicting term in decisions.csv with its impact and owner. Do not hide a placeholder inside apparently final prose. A draft may contain pending items; tell the reader exactly which ones prevent finalization. For changed terms, show original position, proposed wording and commercial effect without inventing a counterparty response.
python3 scripts/check-intake.py /path/to/intake.json /path/to/new-check-report.json
The checker validates the fixed-fee milestone arithmetic, currency and dates, then reports missing core facts. It does not assess law, calculate tax, verify external facts or generate legal clauses. Blank amounts remain unknown; do not replace missing amounts with zero. For hourly, retainer or mixed fees, create an explicit alternative schedule and reconcile it independently instead of forcing it into the fixed-fee helper.
Hand off
Check the same legal names, amounts, tax basis and defined terms across every document. Check that the SOW cannot accidentally override an unresolved liability or IP term. Return editable drafts, the intake/check report, decisions register and a short jurisdiction/source memo with access dates. If DOCX/PDF is requested, use available document tools and inspect pagination, tables and signature blocks. Sending, signing or filing is a separate action requiring user authorization.