Inferensys

Prompt

Missing Liability Cap Detection Prompt

A practical prompt playbook for using the Missing Liability Cap Detection Prompt in production contract review and risk analysis workflows.
Risk analyst performing AI risk assessment on laptop, risk matrices visible, casual office risk session.
PROMPT PLAYBOOK

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.

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.

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.'

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

PROMPT PLAYBOOK

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.

text
You 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.

IMPLEMENTATION TABLE

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.

PlaceholderPurposeExampleValidation Notes

[CONTRACT_TEXT]

Full text of the contract or agreement to analyze for liability cap provisions

  1. LIMITATION OF LIABILITY. IN NO EVENT SHALL EITHER PARTY BE LIABLE... EXCEPT FOR DAMAGES ARISING FROM... THE AGGREGATE LIABILITY SHALL NOT EXCEED THE FEES PAID IN THE TWELVE MONTHS...

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.

PROMPT PLAYBOOK

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.

IMPLEMENTATION TABLE

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 ElementType or FormatRequiredValidation 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.

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when detecting missing liability caps and how to guard against it.

01

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.

02

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".

03

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.

04

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.

05

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.

06

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.

IMPLEMENTATION TABLE

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.

CriterionPass StandardFailure SignalTest 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

ADAPTATION OPTIONS

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

code
Extract 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
Prasad Kumkar

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.