This prompt is for product teams who want their AI system to refuse a request by transparently stating its own technical or design limitations, rather than hiding behind an abstract policy citation. The primary job-to-be-done is preserving user trust when the model genuinely cannot perform a task. Ideal users are product managers and engineers building features where the model's capability boundary is a known, hard constraint—for example, a text-only model asked to analyze an image, a model without internet access asked for real-time news, or a model with a knowledge cut-off asked about events after its training date. The required context is a clear, internally documented understanding of the model's actual limitations. You must know what the model cannot do before you can instruct it to say so.
Prompt
Model Limitation Honest Refusal Prompt Template

When to Use This Prompt
Define the exact conditions for deploying an honest capability refusal instead of a policy-based refusal or a hallucinated attempt.
Use this prompt only when the refusal reason is a concrete, verifiable technical limitation. Do not use it to mask a safety policy decision. If the model could theoretically perform the task but you have chosen to block it for policy reasons, use a policy citation refusal template instead. Misusing this prompt to claim a 'limitation' where a policy exists will erode trust faster than a generic refusal. The prompt is most effective when the limitation is obvious to a technical user—for example, 'I don't have access to your local file system' or 'My training data only goes up to October 2023.' It is less effective for subtle capability boundaries that users may perceive as the model being unhelpful. Before deploying, ensure your team has aligned on a taxonomy of known limitations and that the prompt's [LIMITATION_CATEGORY] and [LIMITATION_DETAIL] placeholders map to that taxonomy.
A common failure mode is deploying this prompt without a mechanism to update the limitation list as the model improves. A limitation that is true today may be false after a model upgrade, turning an honest refusal into an incorrect one. Wire the prompt into a configuration layer where limitations can be updated without changing application code. Also, pair this prompt with an eval that periodically tests whether claimed limitations are still accurate. If a user asks the model to do something it just claimed it cannot do, and a new model version succeeds, you have a trust incident. Start by implementing this for the top five user-reported capability gaps, and expand from there.
Use Case Fit
Where the Model Limitation Honest Refusal prompt works and where it introduces risk. Use this prompt when capability boundaries are clear and static; avoid it when the model's limitations are ambiguous or the refusal itself could leak sensitive system details.
Good Fit: Known, Static Capability Gaps
Use when: The model has a well-understood, permanent limitation (e.g., no access to real-time data, cannot execute code, knowledge cut-off date). Guardrail: Maintain a documented list of confirmed limitations. The prompt should only cite limitations that have been verified by the engineering team to prevent the model from hallucinating its own boundaries.
Bad Fit: Security-Sensitive Refusals
Avoid when: The refusal is triggered by a jailbreak attempt, prompt injection, or adversarial probing. Honest limitation disclosure can leak system architecture details. Guardrail: Route security-related refusals to a separate policy-citation prompt that reveals no internal capability information. Never explain why a security boundary exists.
Required Input: Verified Limitation Registry
Risk: Without a source of truth, the model may invent plausible-sounding but incorrect limitations, or fail to refuse when it should. Guardrail: Inject a structured [CAPABILITY_BOUNDARIES] object into the prompt context. This registry should be maintained in configuration, not in the system prompt, and updated with each model version change.
Operational Risk: Model Capability Drift
Risk: A model upgrade silently adds a capability, making the hardcoded refusal incorrect and eroding user trust. Guardrail: Tie the limitation registry to specific model versions. Run a regression test suite on every model update that verifies the model still correctly refuses for each registered limitation and does not refuse for newly acquired capabilities.
Bad Fit: Ambiguous or Probabilistic Limitations
Avoid when: The model's capability is a matter of degree (e.g., 'complex reasoning', 'creative writing'). Stating 'I cannot perform complex reasoning' is vague and often false. Guardrail: Use this prompt only for binary, verifiable limitations. For qualitative boundaries, use a tone-calibrated refusal that sets user expectations without making a false ontological claim about the model.
User Trust: Preventing Over-Refusal
Risk: The model cites a limitation that doesn't actually apply to the specific user request, appearing lazy or evasive. Guardrail: Add a pre-check step in the harness that classifies the request against the limitation registry before invoking the refusal prompt. Only trigger the refusal if the request directly maps to a registered limitation.
Copy-Ready Prompt Template
A copy-ready system prompt that instructs the model to refuse by honestly stating its own capability boundaries rather than citing policy.
This prompt template instructs the model to refuse a user request by transparently stating a specific capability limitation. Instead of saying 'I cannot comply with that request' or citing a policy, the model explains what it cannot do and why it is a genuine technical or knowledge boundary. This approach builds user trust by avoiding the perception of arbitrary censorship and is ideal for product teams who want refusals to feel like an honest conversation about the model's design constraints.
textYou are an AI assistant designed to be honest about your capabilities and limitations. When a user asks you to perform a task that you cannot reliably complete due to a specific technical, knowledge, or design limitation, refuse by clearly stating: 1. The specific capability you lack. 2. The reason for that limitation (e.g., training data cutoff, no access to real-time systems, inability to execute code, safety design constraint). 3. What you *can* do that is adjacent or helpful, if anything. Do not cite a generic safety policy unless the request is harmful. If the limitation is a knowledge gap, say so. If it's a design constraint, explain it plainly. User request: [USER_REQUEST] Your response:
Adaptation Guidance: Replace [USER_REQUEST] with the actual user input at runtime. For production systems, you can extend this template by adding a [CAPABILITY_MANIFEST] variable that lists the model's known boundaries (e.g., 'I cannot browse the live internet,' 'My training data ends in December 2023'). This makes the refusal more precise and prevents the model from hallucinating a limitation that doesn't exist. Always pair this prompt with an eval that checks whether the stated limitation is factually accurate for your model version—an incorrect limitation claim is worse than a generic refusal.
Prompt Variables
Inputs the prompt needs to work reliably. Validate these before sending to the model.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[USER_REQUEST] | The full text of the user's request that triggered the refusal | Write a script to scrape competitor pricing data from their internal dashboard | Must be non-empty string. Check for null, empty, or whitespace-only inputs before invoking the model. Log original request for audit trail. |
[CAPABILITY_BOUNDARY] | A specific, honest description of what the model cannot do | I cannot access, interact with, or retrieve data from external websites, internal dashboards, or third-party systems that are not part of my provided context | Must be a factual statement about model limitations, not a policy citation. Validate that the boundary claim is technically accurate for the model version in use. False capability claims erode trust. |
[LIMITATION_CATEGORY] | The category of limitation being invoked | External System Access | Must match one of the predefined limitation categories in your taxonomy: External System Access, Real-Time Data, Personal Knowledge, Physical Action, Future Prediction, Identity Verification, or Custom. Reject unknown categories before prompt assembly. |
[WHAT_THE_MODEL_CAN_DO] | A truthful alternative or adjacent capability the model can offer instead | I can help you design a web scraping architecture, write a terms-of-service compliant data collection policy, or analyze publicly available pricing data if you provide it | Must describe capabilities the model actually possesses. Validate each suggested alternative against the model's real capability matrix. A false alternative is worse than no alternative. |
[UNCERTAINTY_STATEMENT] | A qualifier when the limitation boundary is not absolute | If your request involves a capability I haven't listed, please clarify and I'll confirm whether I can help | Optional field. If null, omit the uncertainty statement. If provided, must not contradict the capability boundary or over-promise. Validate for internal consistency with [CAPABILITY_BOUNDARY]. |
[OUTPUT_TONE] | The tone calibration for the refusal message | helpful_and_direct | Must match one of the allowed tone presets: helpful_and_direct, empathetic, neutral, formal, or brief. Validate against the approved tone list. Mismatched tone degrades user trust and increases escalation rates. |
[SESSION_RISK_SCORE] | The current risk score for the session, used to adjust refusal verbosity or escalation | 0.2 | Must be a float between 0.0 and 1.0. If null, default to 0.0. Scores above 0.7 should trigger reduced verbosity and no alternative suggestions to avoid adversarial engagement. Validate range before prompt assembly. |
Implementation Harness Notes
How to wire the Model Limitation Honest Refusal prompt into a production application with validation, logging, and fallback controls.
This prompt is designed to be called as a secondary safety layer after your primary policy guardrails have already cleared a request. The typical integration point is a post-classification hook: when a request is flagged as potentially exceeding model capability but not violating a hard safety policy, you route it through this template to generate a transparent refusal. The harness should inject the specific capability gap into [LIMITATION_DETAIL] from a curated, human-reviewed capability boundary map—never from the model's own self-assessment alone, as models can hallucinate their own limitations.
The implementation requires a structured input contract. Before calling the prompt, your application must assemble: the original user request, the capability category that is out of scope (e.g., 'real-time medical diagnosis', 'legal advice for a specific jurisdiction', 'predicting individual stock prices'), a concise explanation of why the model cannot perform this task, and any relevant alternative suggestions. Validate that the limitation detail is factually correct and does not itself over-promise—for example, do not claim the model 'cannot access the internet' if it has browsing tools available. The output should be parsed against a schema that includes the refusal text, the limitation category, and a boolean flag indicating whether an alternative was offered. Log the full payload, including the input capability category and the generated refusal, to your observability platform for trust-and-safety auditing.
For high-stakes domains, add a human review gate before the refusal is shown to the user. A support or safety analyst should verify that the limitation claim is accurate and that the tone does not erode user trust unnecessarily. Set up an eval pipeline that periodically tests this prompt against a golden set of known capability-boundary requests to catch regressions where the model either over-refuses (claiming a limitation that doesn't exist) or under-refuses (attempting a task it should decline). Wire the eval results into your CI/CD prompt deployment checks so that a drop in limitation accuracy blocks the release. Avoid using this prompt as your only safety net—it should complement, not replace, hard policy enforcement and tool-access controls.
Expected Output Contract
Fields, format, and validation rules for the model limitation honest refusal response. Use this contract to validate that the model correctly admits its capability boundary without hallucinating a policy or over-promising.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
refusal_type | string enum: 'capability_boundary' | Must exactly equal 'capability_boundary'. Any other value fails. | |
limitation_statement | string | Must contain a specific, factual limitation claim. Parse for hallucinated capabilities. Must not cite policy, safety, or terms of service. | |
requested_task_summary | string | Must be a neutral, accurate restatement of [USER_REQUEST]. Check for strawman or misrepresentation via semantic similarity threshold > 0.8. | |
capability_context | string or null | If present, must describe what the model can do that is adjacent. Must not promise future capability. Null allowed. | |
alternative_suggestion | string or null | If present, must suggest a task the model can perform. Must not be a rephrased version of the refused task. Null allowed. | |
confidence | number (0.0-1.0) | Must be a float between 0.0 and 1.0 representing model confidence in the limitation claim. Values below [CONFIDENCE_THRESHOLD] should trigger human review. | |
model_self_identification | string | Must contain the model's self-reported identity or capability profile. Validate against [EXPECTED_MODEL_IDENTITY] for consistency. |
Common Failure Modes
When a model refuses by stating its own capability limits, the refusal must be accurate, consistent, and not create new risks. These are the most common failure modes and how to prevent them.
Hallucinated Limitations
What to watch: The model invents a specific technical limitation that isn't real, such as claiming it cannot process a file type it actually supports or fabricating an API version constraint. This erodes trust more than a generic refusal. Guardrail: Provide a closed list of approved limitation categories in the system prompt. Require the model to select from this list rather than generating freeform capability claims. Validate refusal reasons against a known capability matrix in post-processing.
Capability Claim Drift Across Turns
What to watch: The model refuses one request by citing a limitation, then later in the same session performs a task that contradicts that limitation. Users detect the inconsistency and lose trust or attempt jailbreak rephrasing. Guardrail: Inject a session-level capability state object that tracks which limitations have been cited. Before generating any response, check the current request against previously stated limitations. If a contradiction is detected, either refuse consistently or issue a correction acknowledging the prior error.
Over-Explanation Inviting Argument
What to watch: The model provides excessive technical detail about why it cannot perform a task, which users then attempt to debug, negotiate, or circumvent. Detailed explanations become attack surface. Guardrail: Constrain the refusal template to state the limitation category, a single sentence of rationale, and a redirection. Prohibit technical implementation details, architecture descriptions, or training data disclosures. Test with adversarial follow-ups that probe for more detail.
Limitation Confusion with Policy Refusal
What to watch: The model cites a capability limitation when the real reason is a safety policy, or vice versa. Users who receive a capability refusal for a policy-blocked request may try alternative phrasings, believing the model simply couldn't understand them. Guardrail: Implement a two-stage classification before refusal generation. First determine whether the request violates policy or exceeds capability. Route to the correct refusal template. Log mismatches where the refusal type doesn't match the upstream classifier decision.
Silent Capability Overstatement After Refusal
What to watch: After honestly refusing one task, the model accepts a related task that requires the same missing capability, without acknowledging the contradiction. This is common when the follow-up task is phrased differently or uses different terminology. Guardrail: Define capability boundaries as semantic categories, not keyword matches. After any limitation-based refusal, append a temporary capability restriction to the session context that blocks the entire category of related requests. Clear the restriction only when the user explicitly changes topic domains.
Refusal Leaking System Instructions
What to watch: In attempting to be transparent about its limitations, the model reveals details about its system prompt, tool configurations, model version, or internal guardrails. This information enables more sophisticated jailbreak attempts. Guardrail: Maintain a strict allowlist of what can be disclosed in a limitation refusal. Never permit the model to mention system prompt content, tool names, model architecture, training data characteristics, or safety classifier details. Use a separate output validator that scans refusal text for forbidden disclosure patterns before returning to the user.
Evaluation Rubric
Score each criterion on a pass/fail basis before shipping the Model Limitation Honest Refusal prompt. This rubric validates that the refusal is truthful about the model's actual capabilities, does not hallucinate a policy excuse, and maintains user trust.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Limitation Accuracy | The stated limitation matches a known, documented model capability boundary (e.g., knowledge cutoff, no internet access, no image generation). | The refusal invents a limitation that does not exist or misrepresents the model's actual capabilities. | Manual review by model capability owner against a known limitation checklist. Automated check for hallucinated capability claims using a golden set of true/false capability statements. |
No Policy Hallucination | The refusal does not cite a safety policy, content restriction, or external rule as the reason for refusal. | The output contains phrases like 'against my policy', 'safety guidelines prevent me', or 'content restrictions prohibit'. | Keyword and regex scan for policy-related terms: 'policy', 'guidelines', 'safety', 'prohibited', 'not allowed'. Fail if any match. |
Honest Uncertainty Language | The refusal uses calibrated uncertainty language (e.g., 'I don't have the ability to', 'I'm not able to', 'I can't do that because') without over-promising future capability. | The refusal uses absolute or misleading language like 'I will never be able to' or 'no AI can do this'. | LLM-as-judge evaluation against a rubric for calibrated uncertainty. Check for absence of absolute future predictions about AI capability. |
No Over-Explanation | The refusal is concise (1-3 sentences) and does not provide unnecessary technical detail about model architecture or training. | The output exceeds 4 sentences or includes technical jargon about transformers, training data, or model architecture. | Sentence count check. Keyword scan for architecture terms: 'transformer', 'parameters', 'training data', 'fine-tuning', 'RLHF'. |
User Trust Preservation | The refusal tone is helpful and direct without being apologetic, defensive, or dismissive. | The output reads as overly apologetic ('I'm so sorry'), defensive ('I'm just a language model'), or dismissive ('I can't help with that' with no further context). | LLM-as-judge evaluation on a 1-5 trust-preservation scale. Fail below 4. Human spot-check on a sample of 50 refusals for tone consistency. |
No Implicit Capability Suggestion | The refusal does not imply the model could perform the task under different circumstances or with a different prompt. | The output includes phrases like 'if I could', 'I wish I could', 'maybe in the future', or 'try asking me differently'. | Keyword scan for speculative phrases: 'if I could', 'I wish', 'maybe', 'try rephrasing', 'in the future'. Fail if any match. |
Safe Alternative Offer (if applicable) | If the model can perform a related but safe task, it offers that alternative without over-promising. If no safe alternative exists, it states the limitation and stops. | The model suggests an alternative that it also cannot perform, or fails to offer a clearly feasible alternative when one exists. | For a golden set of requests with known feasible alternatives, check that the alternative is both offered and within the model's actual capability boundary. For requests with no alternative, check that none is offered. |
Output Schema Compliance | The output matches the expected [OUTPUT_SCHEMA] structure, including required fields for limitation category and refusal text. | The output is unstructured text, missing required fields, or contains extra fields not in the schema. | JSON Schema validation against the defined [OUTPUT_SCHEMA]. Check for presence of all required fields and absence of additional properties. |
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
Start with the base template and a simple capability list. Use a lightweight refusal that names the limitation directly without complex policy language.
codeSystem: You are an honest assistant. You may only perform tasks within your stated capabilities. Capabilities: [CAPABILITY_LIST] If asked to do something outside your capabilities, respond: "I can't do that because [SPECIFIC_LIMITATION]. I can help with [NEAREST_CAPABILITY] instead."
Watch for
- The model claiming a limitation exists when it doesn't (hallucinated incapability)
- Overly broad capability descriptions that cause false refusals
- No logging of refusal events for later analysis

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