Contract Review
Semantic search across large document sets to find relevant clauses, commitments, or obligations.
The Problem
Contract review across hundreds of documents requires finding specific clauses, obligations, and commitments. Traditional keyword search fails when different contracts use different language for the same concepts — “termination clause” vs “exit provisions” vs “contract end terms”.
Workflow
1. Configure Document Sources
Point Foxhound at your contract repository:
ingestion:
sources:
- type: document
path: "~/contracts/vendor-agreements"
- type: document
path: "~/contracts/employment"
- type: document
path: "~/contracts/partnership-agreements"2. Ingest and Explore
uv run python ingest.py --reset
uv run python explore.py --source-type document3. Search for Specific Clause Types
mkdir -p evidence
uv run python query.py \
--semantic "termination notice period exit clause" \
--source-type document \
--top-k 100 --export-json evidence/termination.json
uv run python query.py \
--semantic "liability indemnity limitation damages" \
--source-type document \
--top-k 100 --export-json evidence/liability.json
uv run python query.py \
--semantic "payment terms invoice schedule milestone" \
--source-type document \
--top-k 100 --export-json evidence/payment.json
uv run python query.py \
--semantic "confidentiality non-disclosure NDA intellectual property" \
--source-type document \
--top-k 100 --export-json evidence/confidentiality.json4. Review Inline
Preview results before running the full analysis:
# Show body previews
uv run python query.py \
--semantic "termination notice period" \
--source-type document --show
# Read a specific result in full
uv run python query.py \
--semantic "termination notice period" \
--source-type document --read 35. Merge and Analyse
uv run python merge.py evidence/*.json --output evidence/merged.json
uv run python analyze.py evidence/merged.json \
--full-pipeline \
--context "Extract and summarise key contractual obligations, notice periods, liability caps, and payment terms" \
--model deepseek6. Export Summary
uv run python export.py analysis_output.md --output contract-summary.mdTips
- Semantic search excels here — it matches “30-day notice period” when you search for “termination clause”
- Use
--source-type documentto exclude emails and notes from contract-focused searches - For large contract sets, use
gemini-flashwith its 1M token context window - Export to CSV with
--export clauses.csvfor spreadsheet comparison across contracts