Risk review teams and legal engineers use this prompt to systematically analyze contracts for limitation of liability clauses. The prompt extracts cap amounts, identifies cap types (e.g., hard cap, fee-based cap, supercap for specific breaches), and explicitly flags contracts where liability caps are missing, uncapped, or have unclear carve-outs. This is not a general contract summary prompt. Use it when you need structured, auditable output about liability exposure that can feed into a risk scoring system, a compliance checklist, or a human review queue.
Prompt
Missing Liability Cap Detection Prompt

When to Use This Prompt
A systematic prompt for extracting limitation of liability clauses, cap amounts, and cap types, with explicit flags for missing or uncapped exposure.
The prompt is designed for production pipelines where silent failures from missing data cause downstream errors that are harder to detect than explicit uncertainty flags. It requires the full contract text as input and expects a defined output schema with fields for cap presence, cap amount, cap type, carve-outs, and confidence scores. The prompt works best when paired with a clause isolation step that extracts the limitation of liability section before analysis, reducing noise from unrelated contract language. For multi-tier cap structures—where different caps apply to different breach types—the prompt returns an array of cap entries rather than a single value.
Do not use this prompt for general contract summarization, obligation extraction, or clause review outside liability caps. It is not designed for contracts governed by jurisdictions where liability limitation language follows non-standard patterns without adaptation. For high-risk contracts, always route outputs with missing-cap flags or low confidence scores to human review before the data enters a risk scoring system. Pair this prompt with the Null Handling Prompt for JSON Extraction to ensure downstream systems can distinguish between 'cap not found,' 'cap explicitly waived,' and 'analysis failed.'
Use Case Fit
Where the Missing Liability Cap Detection Prompt works, where it fails, and what you must provide before deploying it into a contract review pipeline.
Good Fit: Structured Cap Extraction
Use when: you need to extract explicit liability cap amounts, types (aggregate, per-incident, per-claim), and carve-outs from a single contract. The prompt excels at identifying multi-tier caps and producing structured JSON with citation to section and paragraph. Guardrail: always pair with a schema validator that confirms cap type enum values and numeric normalization before ingestion.
Bad Fit: Implied or Cross-Referenced Caps
Avoid when: the liability cap is defined by reference to another agreement, a statutory limit, or an implied standard of reasonableness. The prompt may hallucinate a cap value or miss the reference entirely. Guardrail: pre-process documents with a cross-reference detection step and route documents with external references to human review before running extraction.
Required Inputs
You must provide: the full contract text (not excerpts), a defined output schema with cap type enum values, and a list of expected carve-out categories (fraud, death, IP, confidentiality). Guardrail: if the contract exceeds the model's context window, use a clause isolation pre-processing step to extract the limitation of liability section before running this prompt.
Operational Risk: Silent Nulls
Risk: the prompt may return an empty or null cap field without an explicit absence reason, causing downstream systems to treat the contract as uncapped when the clause was simply missed. Guardrail: require an explicit absence_reason field in the output schema and add an eval that fails any extraction where cap_amount is null but absence_reason is also null.
Operational Risk: Multi-Tier Confusion
Risk: contracts with separate caps for different liability types (general, data breach, IP infringement) may be flattened into a single cap, losing critical risk distinctions. Guardrail: design the output schema to return an array of cap objects with cap_type and applicable_scope fields, and add an eval that counts distinct cap tiers against a human-annotated ground truth.
Operational Risk: Currency and Jurisdiction Mismatch
Risk: the prompt may extract a numeric cap value without capturing the currency or governing law, making the extracted figure meaningless for risk aggregation across jurisdictions. Guardrail: require currency and governing_law fields in the output schema, and add a validation rule that rejects any cap extraction where currency is missing or ambiguous.
Copy-Ready Prompt Template
A reusable prompt with square-bracket placeholders for detecting missing, uncapped, or ambiguous liability caps in contract text.
This prompt template is designed to be dropped into a document review pipeline where the input is a full contract or a pre-isolated limitation of liability clause. It instructs the model to extract structured information about liability caps—including cap amounts, types, and applicable carve-outs—and to explicitly flag when a cap is missing, uncapped, or has unclear boundaries. The template uses square-bracket placeholders so you can adapt it to your specific risk policy, output schema, and contract domain without rewriting the core logic.
textYou are a contract risk analyst assistant. Your task is to examine the provided contract text and determine whether a limitation of liability clause exists, and if so, extract the liability cap details. If no such clause is found, or if the cap is missing, uncapped, or ambiguous, you must flag it explicitly. ## INPUT [CONTRACT_TEXT] ## RISK POLICY [RISK_POLICY] ## OUTPUT SCHEMA You must return a single JSON object conforming to this structure: { "liability_cap_present": boolean, "cap_details": [ { "cap_type": "general" | "per_claim" | "aggregate" | "per_incident" | "other", "cap_amount": number | null, "currency": string | null, "cap_description": string, "source_section": string, "confidence": "high" | "medium" | "low" } ], "uncapped_liabilities": [ { "liability_type": string, "source_section": string } ], "carve_outs": [ { "carve_out_type": string, "description": string, "source_section": string } ], "flags": { "missing_clause": boolean, "uncapped": boolean, "ambiguous_cap": boolean, "multi_tier_structure": boolean, "requires_human_review": boolean }, "summary": string } ## CONSTRAINTS [CONSTRAINTS] ## EXAMPLES [EXAMPLES] ## INSTRUCTIONS 1. First, scan the entire [CONTRACT_TEXT] for any limitation of liability clause. If none is found, set `flags.missing_clause` to true, `liability_cap_present` to false, and `flags.requires_human_review` to true. Provide a brief summary explaining the absence. 2. If a clause is found, extract every cap mentioned. A contract may have multiple caps (e.g., a general cap and a separate cap for IP infringement). Capture each in the `cap_details` array. 3. For each cap, determine the `cap_type`. If the type is unclear, use "other" and explain in `cap_description`. 4. If a cap amount is stated as a formula, a reference to another document, or an insurance policy limit, set `cap_amount` to null and note the dependency in `cap_description`. Set `confidence` to "low". 5. If the clause explicitly states there is no cap on certain liabilities (e.g., fraud, death, gross negligence), list each in `uncapped_liabilities`. 6. Identify any carve-outs that reduce or exclude certain damages from the cap (e.g., indemnification obligations, data breach costs). List each in `carve_outs`. 7. Set `flags.uncapped` to true if the contract has no cap at all or if the cap is stated as unlimited. 8. Set `flags.ambiguous_cap` to true if the cap language is contradictory, references missing schedules, or uses vague terms like "to the extent permitted by law" without a stated amount. 9. Set `flags.multi_tier_structure` to true if the contract has different caps for different liability types. 10. Set `flags.requires_human_review` to true if any confidence is "low", if the cap is missing, or if the cap structure is complex enough that automated extraction could be unreliable. 11. For every extracted field, include a `source_section` reference (e.g., "Section 8.2(a)") so a human reviewer can verify the finding. 12. If [RISK_POLICY] specifies a required minimum cap or prohibited uncapped liabilities, compare the extracted details against the policy and note any violations in the `summary`.
To adapt this template, replace the placeholders with your specific context. [CONTRACT_TEXT] should be the full contract body or the pre-extracted clause. [RISK_POLICY] can be a short natural-language statement of your organization's risk tolerance (e.g., "Liability caps below 2x contract value require escalation. Uncapped liability for data breaches is prohibited."). [CONSTRAINTS] can include domain-specific rules like "Ignore liability caps in the 'Insurance' section unless cross-referenced by the limitation of liability clause." [EXAMPLES] should contain one or two few-shot demonstrations of correctly parsed outputs, including an example of a missing cap and an example of a multi-tier structure. After adapting, run the prompt against a golden dataset of contracts with known cap structures and compare the flags.requires_human_review field against your risk team's actual review decisions to calibrate the threshold.
Prompt Variables
Required inputs for the Missing Liability Cap Detection Prompt. Each variable must be populated before the prompt is assembled and sent. Validation notes describe how to programmatically check the input before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[CONTRACT_TEXT] | Full text of the contract or agreement to analyze for liability cap provisions |
| Check string length > 0. Reject if empty. Warn if under 500 characters as likely incomplete. Strip non-printable characters. Preserve original line breaks for section boundary detection. |
[JURISDICTION] | Governing law or regulatory context that determines which liability cap standards apply | California, USA | Must match a known jurisdiction code from the allowed list. Use enum validation: [California, Delaware, New York, England and Wales, Singapore, null]. Null allowed when jurisdiction is unknown or to be inferred from the contract. |
[CAP_TYPE_CHECKLIST] | List of liability cap types the prompt must search for and report on | ["aggregate_cap", "per_claim_cap", "subcap_for_indemnity", "subcap_for_data_breach", "uncapped_carveouts"] | Must be a valid JSON array of strings. Each string must match an allowed cap type enum. Reject if array is empty. Validate against schema before prompt assembly. |
[OUTPUT_SCHEMA] | JSON schema that defines the required output structure for the extraction result | {"type": "object", "properties": {"cap_present": {"type": "boolean"}, "cap_amount": {"type": ["string", "null"]}, "cap_type": {"type": ["string", "null"]}, "carveouts": {"type": "array"}, "missing_flags": {"type": "array"}}, "required": ["cap_present", "missing_flags"]} | Must be a valid JSON Schema object. Validate with a JSON Schema validator before use. Schema must include required fields for cap_present and missing_flags. Reject if schema is malformed or missing required fields. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score required for the model to report a finding as present rather than uncertain | 0.85 | Must be a float between 0.0 and 1.0. Default to 0.80 if not specified. Values below 0.70 increase false positives. Values above 0.95 increase false negatives. Log threshold in trace for eval comparison. |
[MAX_CAP_AMOUNT_THRESHOLD] | Upper bound for flagging unusually high caps that may indicate uncapped liability in practice | 5000000 | Must be a positive number or null. When set, caps exceeding this value trigger an additional review flag. Null disables the threshold check. Validate as numeric or null before prompt assembly. |
[REQUIRED_CARVEOUTS] | List of carveout types that must be present for the liability cap to be considered complete | ["fraud", "gross_negligence", "willful_misconduct", "confidentiality_breach"] | Must be a valid JSON array of strings or null. Each string must match an allowed carveout enum. Null means no carveout completeness check is performed. Validate array contents against allowed values. |
[DOCUMENT_SECTION_BOUNDARIES] | Pre-extracted section markers or page ranges to help the model locate the limitation of liability clause | {"sections": [{"title": "Limitation of Liability", "start_line": 342, "end_line": 389}]} | Must be a valid JSON object or null. When provided, use to narrow the search scope. When null, the model searches the full contract text. Validate object structure before use. Warn if section boundaries exceed contract text length. |
Implementation Harness Notes
How to wire the Missing Liability Cap Detection prompt into a contract review application with validation, retries, and human review gates.
This prompt is designed to be called as part of a document processing pipeline, not as a standalone chat interaction. The typical integration pattern involves: (1) chunking the contract into sections with preserved heading hierarchy, (2) routing only the limitation-of-liability-relevant sections to this prompt to control context cost, (3) parsing the structured JSON output, and (4) applying post-processing validation before the result reaches a reviewer or downstream system. Because missing liability caps represent a material contract risk, the implementation must treat both 'cap found' and 'cap absent' results as equally important signals—a silent failure where the model misses a cap is more dangerous than a false positive that triggers human review.
Validation layer. Before the output is trusted, apply a schema validator that checks: the liability_cap_detected boolean is present; if true, cap_amount, cap_type, and currency fields are non-null; source_citation includes at least a section reference; and carve_outs is an array even if empty. Add a business-rule validator that flags: caps expressed as a formula rather than a fixed amount (e.g., 'fees paid in the prior 12 months'), multi-tier caps where only one tier was extracted, and caps that reference schedules or exhibits not yet processed. Reject outputs that fail schema validation and retry with the same prompt plus the validation error message appended as a [VALIDATION_ERROR] context block. After two retries, escalate to a human review queue with the raw model output and validation trace attached.
Model choice and configuration. Use a model with strong legal text reasoning and structured output support, such as GPT-4o, Claude 3.5 Sonnet, or Gemini 1.5 Pro. Set temperature to 0 or near-zero to minimize variance in extraction. If the model supports structured output mode (e.g., OpenAI's response_format with a JSON schema or Claude's tool-use with a defined schema), use it rather than relying solely on prompt instructions—this reduces parsing failures. For high-throughput pipelines processing hundreds of contracts, consider a two-stage architecture: a cheaper classifier model first determines whether a limitation-of-liability clause exists anywhere in the document, and only routes positive or uncertain cases to this detailed extraction prompt.
Logging and audit trail. Log every invocation with: the prompt version hash, the model ID, the input section text, the raw output, the parsed output, validation results, retry count, and the final disposition (passed, flagged for review, escalated). This audit trail is critical for contract review workflows because downstream decisions—such as whether to sign an agreement—may depend on the cap detection result. Store the source_citation field alongside the extracted cap so reviewers can click directly to the relevant contract section. For regulated industries, ensure logs are immutable and retained according to your document retention policy.
Human review integration. When the prompt returns liability_cap_detected: false or confidence: low, route the contract to a review queue with a pre-filled summary: 'No liability cap detected in sections [X, Y, Z]. Model confidence: [value]. Recommended action: Manual review of limitation of liability.' When a cap is detected but carve-outs are flagged as 'unclear' or 'broad,' surface those carve-outs prominently in the review UI so the reviewer can assess whether the cap is effectively unlimited. Never allow an automated 'no cap found' result to close a risk review task without human confirmation unless you have measured and accepted the false-negative rate against your risk tolerance.
What to avoid. Do not use this prompt on a full contract document without first extracting the relevant sections—context-window limits and attention dilution will degrade extraction quality on long documents. Do not treat the model's output as a legal determination; the prompt is a detection and extraction tool, not a replacement for legal judgment. Do not skip the validation layer; raw model outputs will occasionally produce malformed JSON, missing fields, or hallucinated section references that must be caught before the result enters a system of record.
Expected Output Contract
Fields, types, and validation rules for the Missing Liability Cap Detection Prompt output. Use this contract to build post-processing validators, eval checks, and downstream ingestion logic.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
liability_cap_detected | boolean | Must be true or false. If false, all cap detail fields must be null. | |
cap_amount | number or null | If liability_cap_detected is true, must be a positive number. If false, must be null. Reject zero or negative values. | |
cap_currency | string (ISO 4217) or null | If cap_amount is present, must be a valid 3-letter ISO 4217 currency code. If cap_amount is null, must be null. | |
cap_type | enum: [single, multi_tier, aggregate, per_claim, uncapped, unclear] or null | Must match one of the allowed enum values. If liability_cap_detected is false, must be null. If uncapped, cap_amount must be null. | |
cap_clause_text | string or null | If liability_cap_detected is true, must contain the verbatim clause text from the source document. If false, must be null. Max 2000 characters. | |
cap_section_reference | string or null | If liability_cap_detected is true, must include section number, page, or paragraph reference. Format: Section [X] or Page [Y]. If false, must be null. | |
carve_outs | array of strings or null | If present, each element must be a non-empty string naming a carve-out category (e.g., fraud, IP infringement, confidentiality breach). If no carve-outs found, must be an empty array, not null. | |
missing_cap_flag | boolean | Must be true if liability_cap_detected is false or cap_type is uncapped or unclear. Must be false if a specific cap is detected. Used for downstream routing to human review. |
Common Failure Modes
What breaks first when detecting missing liability caps and how to guard against it.
Silent Null on Multi-Tier Caps
Risk: The model extracts a single cap amount but misses a secondary sub-limit for specific damage types (IP, data breach, gross negligence). The output reports the cap as present and complete when critical carve-outs are absent. Guardrail: Require the output schema to include a cap_tiers array. Add an eval check that fails if the number of extracted tiers does not match a ground-truth count for multi-tier test contracts.
False Absence from Synonym Drift
Risk: The contract uses non-standard language like 'maximum aggregate exposure,' 'total liability ceiling,' or 'sole remedy cap' instead of 'limitation of liability.' The prompt declares the clause missing when it is present under different wording. Guardrail: Include a glossary of 10-15 known synonyms in the system prompt's [CONTEXT]. Add a negative test case using a contract that only uses obscure synonyms and verify the model returns status: "found".
Uncapped Carve-Out Misclassification
Risk: The contract states liability is capped at $1M except for 'fraud, willful misconduct, or breach of confidentiality,' which are uncapped. The model reports a simple cap of $1M and omits the uncapped carve-outs, masking a major risk. Guardrail: The output schema must include an uncapped_carve_outs field. Write an eval assertion that fails if a known uncapped carve-out from the test contract does not appear in this field.
Currency and Unit Normalization Failure
Risk: The model extracts '500,000' but drops the currency (EUR vs. USD) or misinterprets units ('$500K' as $500 instead of $500,000). Downstream risk scoring becomes unreliable. Guardrail: Require normalized fields for amount, currency, and amount_raw in the output schema. Add a validation rule that rejects any output where amount_raw cannot be mathematically reconciled with amount.
Cap Scattered Across Multiple Clauses
Risk: The limitation of liability clause references a separate schedule, an incorporated master agreement, or a defined term set in another section. The model reads only the immediate clause and reports a missing or incomplete cap. Guardrail: Instruct the model to follow defined term chains and cross-references for up to [MAX_HOPS] steps. Include a multi-document test harness where the cap value lives in an attached schedule, and verify the model resolves it.
Over-Confidence on Ambiguous Language
Risk: The contract uses vague language like 'liability shall not exceed fees paid in the prior twelve months' without stating the fees. The model hallucinates a number or reports high confidence on an uncalculable cap. Guardrail: Require a confidence score (0.0-1.0) for every extracted cap. Add an eval threshold: if the contract contains an unquantified formula, the confidence must be ≤ 0.4. Flag low-confidence outputs for mandatory human review.
Evaluation Rubric
Criteria for testing the Missing Liability Cap Detection Prompt before production deployment. Each row targets a specific failure mode observed in contract review pipelines.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Liability cap presence detection | Correctly identifies presence or absence of a limitation of liability clause with explicit true/false flag | False negative: cap exists but prompt returns 'not found'. False positive: no cap but prompt hallucinates one | Run against 20 contracts with known cap presence (10 with, 10 without). Require 100% recall on presence, 95% precision |
Cap amount extraction accuracy | Extracts exact numeric cap amount and currency when present, returns null with reason when absent | Extracted amount differs from ground truth by more than 5% or currency is wrong. Null returned when amount is explicitly stated | Compare extracted [CAP_AMOUNT] and [CAP_CURRENCY] against manually verified values in 15 contracts with explicit caps |
Cap type classification | Correctly classifies cap type into predefined enum: total_aggregate, annual, per_claim, per_incident, fee_multiplier, uncapped, or other | Cap type misclassified (e.g., per_claim labeled as total_aggregate). Unrecognized cap structure defaults to 'other' without explanation | Test against 10 contracts with diverse cap structures including multi-tier caps. Require 90% exact match on cap type enum |
Multi-tier cap structure detection | Flags presence of multiple cap tiers and extracts each tier with its trigger condition and amount | Multi-tier cap reported as single-tier. One tier missed entirely. Trigger condition for a tier is absent or wrong | Run against 5 contracts with known multi-tier caps (e.g., different caps for IP breach vs general liability). Require all tiers detected |
Carve-out and exclusion extraction | Extracts carve-outs that sit outside the cap (e.g., fraud, IP infringement, confidentiality breach) as a structured list | Carve-out missed entirely. Carve-out extracted but incorrectly classified as inside the cap. Non-carve-out text extracted as carve-out | Test against 8 contracts with known carve-outs. Require recall >= 0.85 and precision >= 0.90 on carve-out detection |
Uncapped liability flagging | Returns [IS_UNCAPPED]: true when contract has no liability cap or explicitly states unlimited liability, with supporting citation | Uncapped contract flagged as capped. Capped contract flagged as uncapped. Flag present but citation points to wrong section | Run against 5 uncapped contracts and 5 capped contracts. Require 100% recall on uncapped detection with valid citation |
Citation grounding accuracy | Every extracted field includes a [CITATION] with page, section, or paragraph reference that resolves to the correct source text | Citation points to wrong section. Citation is missing for a required field. Citation is too vague to locate (e.g., 'in the contract') | Manual spot-check 30 citations across 10 contracts. Require >= 90% of citations resolve to correct source location |
Ambiguity flagging | Returns [AMBIGUITY_FLAG]: true with explanation when cap language is unclear, contradictory, or subject to interpretation | Ambiguous cap language not flagged. Clear cap language incorrectly flagged as ambiguous. Explanation is generic rather than specific | Test against 5 contracts with known ambiguous cap language (drafted by legal experts). Require ambiguity flag on all 5 with specific reasoning |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Add strict JSON schema validation, retry logic on parse failure, and an eval harness with golden contracts. Include explicit instructions for multi-tier caps, carve-outs, and mutual vs. one-sided caps. Wire the output into a contract risk dashboard.
Prompt snippet
codeExtract limitation of liability provisions from [CONTRACT_TEXT]. Return valid JSON matching [OUTPUT_SCHEMA]. Rules: - If no liability cap exists, set cap_type: "missing" and cap_amount: null - If cap varies by breach type, return all tiers in cap_tiers array - Distinguish liability caps from indemnification, warranty, and service credit caps - Flag carve-outs (fraud, death, IP, confidentiality) in carve_outs array - Set confidence per field; set overall_confidence based on weakest field
Watch for
- Silent format drift when model changes output structure
- Missing human review step for high-exposure contracts
- False negatives on liability caps embedded in unrelated sections
- Carve-out enumeration that misses implied carve-outs

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us