Inferensys

Prompt

Session Closeout Checklist Prompt for Unresolved Work

A practical prompt playbook for using Session Closeout Checklist Prompt for Unresolved Work in production AI workflows.
Developer doing prompt engineering on laptop, prompt variations visible on screen, casual coding session.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the operational context, ideal user, and critical boundaries for deploying the session closeout safety gate.

This prompt is designed for AI assistants and copilots that must confirm all work is resolved before a session ends. It generates a user-facing checklist of every detected open item, asks for explicit disposition on each, and refuses to close the session if items remain unresolved. Use this when session closeout carries operational risk: dropped support tickets, incomplete handoffs, or compliance gaps. This prompt belongs in the final stage of a conversation lifecycle, after the assistant has attempted to answer questions and complete tasks, but before the session state is archived or transferred. It is not a general summarizer or a task tracker; it is a safety gate that prevents premature session termination.

The ideal user is an engineering lead or product manager building a production assistant where session termination triggers downstream workflows—ticket closure, handoff to human agents, or compliance archiving. The required context includes a structured list of open items (questions, tasks, commitments) that the system has tracked across turns. Without this tracking data, the prompt cannot perform its core function. Do not use this prompt for casual chat sessions, stateless Q&A, or workflows where session termination has no operational consequence. It is also inappropriate for real-time safety-critical systems where a refusal to close could block emergency escalations.

Before implementing, ensure your application layer maintains an explicit open-item state object. The prompt consumes this state and enforces resolution, but it does not detect open items from raw transcripts—that detection should happen upstream using dedicated tracking prompts or state management middleware. Wire this prompt as the final gate in your session termination flow, with a hard block on closure if the model returns unresolved items. Always log the checklist output and user dispositions for auditability. If your use case involves regulated domains, pair this prompt with human review for any item marked as deferred or escalated.

PRACTICAL GUARDRAILS

Use Case Fit

Where the Session Closeout Checklist Prompt delivers value and where it introduces risk. Use these cards to decide if this prompt fits your workflow before integrating it into your application harness.

01

Good Fit: Regulated Support & Compliance Workflows

Use when: closing a session requires auditable proof that all customer questions, commitments, and action items were explicitly resolved or handed off. Guardrail: The prompt's refusal logic prevents premature closeout, but you must still log the final checklist as a compliance artifact in your system of record.

02

Good Fit: High-Stakes Task-Oriented Assistants

Use when: an assistant manages multi-step workflows where dropping a step has material consequences (e.g., healthcare handoffs, financial transactions, legal intake). Guardrail: Pair this prompt with a state machine that tracks item disposition. The checklist is the user-facing confirmation; the state machine is the source of truth.

03

Bad Fit: Casual or Open-Ended Chat

Avoid when: the conversation has no defined endpoint or the user expects frictionless, social interaction. Risk: Forcing a closeout checklist on a casual chat feels robotic and erodes user experience. Guardrail: Gate this prompt behind a session-phase classifier that only triggers closeout when a task-oriented workflow is detected.

04

Required Inputs: Structured Open-Item State

Risk: The prompt cannot invent items it already forgot. If your state tracking missed a commitment, the checklist will silently omit it. Guardrail: This prompt requires a pre-computed list of open items from your state management layer. Never rely on the model to scan raw transcripts for completeness—use a dedicated detection prompt upstream.

05

Operational Risk: User Override Without Resolution

Risk: A determined user may insist on closing the session despite unresolved items, and a poorly designed harness might comply without recording the override. Guardrail: The prompt includes refusal logic, but your application must enforce that any override generates an exception record with the user's explicit acknowledgment, timestamp, and the list of unresolved items carried forward.

06

Operational Risk: Checklist Fatigue in Long Sessions

Risk: Sessions with many open items produce an overwhelming checklist that users dismiss without reading. Guardrail: Implement severity-based filtering. Only surface items above a criticality threshold in the closeout prompt. Low-severity items can be silently carried forward to the next session or summarized in a post-session digest.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A production-ready prompt template that generates a user-facing checklist of unresolved items and enforces safe session closeout.

This template is the core instruction set for generating a session closeout checklist. It forces the model to inventory every open question, deferred task, and unfulfilled commitment before allowing a session to end. The prompt is designed to be copied directly into your prompt management layer, with square-bracket placeholders that your application must populate from the current conversation state, user profile, and risk policy before each inference call.

text
You are a session closeout auditor for [ASSISTANT_NAME], a [ASSISTANT_ROLE] assistant. Your job is to prevent sessions from ending with unresolved work.

## CONTEXT
- Current conversation transcript: [CONVERSATION_TRANSCRIPT]
- Open items tracked by the system: [TRACKED_OPEN_ITEMS]
- User's closeout request: [USER_CLOSEOUT_MESSAGE]
- Session duration: [SESSION_DURATION]
- Risk level for this domain: [RISK_LEVEL]

## TASK
Generate a structured closeout checklist for the user. The checklist must include:
1. Every question the user asked that was not fully answered.
2. Every task the assistant committed to complete that remains undone.
3. Every action item the user requested that has no confirmed resolution.
4. Every approval or decision that is still pending.

## OUTPUT SCHEMA
Return a JSON object with this exact structure:
{
  "session_summary": "One-sentence summary of what the session covered.",
  "total_open_items": <integer>,
  "items": [
    {
      "id": "item-<unique-integer>",
      "type": "unanswered_question | unfulfilled_commitment | pending_action | pending_approval",
      "description": "What the user asked for or what was promised.",
      "source_turn_reference": "Quote or paraphrase from the transcript showing where this originated.",
      "severity": "blocking | high | medium | low",
      "recommended_disposition": "answer_now | schedule_followup | transfer_to_human | confirm_no_longer_needed",
      "blocking_closeout": <true | false>
    }
  ],
  "closeout_blocked": <true | false>,
  "blocking_reason": "If closeout is blocked, explain why in one sentence. Otherwise null.",
  "safe_closeout_message": "If closeout is allowed, provide the message to show the user. Otherwise null.",
  "required_user_confirmations": [
    "List of explicit confirmations the user must provide before the session can close."
  ]
}

## RULES
- Do not invent items. Only include items with clear evidence in the transcript or tracked state.
- A rhetorical question or a question the user answered themselves is not an open item.
- If the assistant said 'I'll follow up' or 'I'll check on that,' it is an unfulfilled commitment.
- If [RISK_LEVEL] is 'high' or 'critical,' treat any unconfirmed resolution as blocking.
- If closeout is blocked, the safe_closeout_message must be null.
- If no open items exist, set total_open_items to 0, items to [], closeout_blocked to false, and provide a safe_closeout_message.
- Do not include items the user explicitly said they no longer need.

## CONSTRAINTS
- [CONSTRAINTS]

To adapt this template, replace each placeholder with live data from your application. [CONVERSATION_TRANSCRIPT] should contain the full turn history, not a summary. [TRACKED_OPEN_ITEMS] should come from your state management layer—if you don't have one, omit this field and rely on transcript analysis alone, but expect lower recall on implicit commitments. [CONSTRAINTS] is where you inject domain-specific rules, such as 'financial advice sessions cannot close with unanswered risk questions' or 'healthcare sessions require explicit disposition on every medication-related question.' For high-risk domains, always set [RISK_LEVEL] to 'high' or 'critical' to force blocking behavior on unresolved items. Test this prompt against transcripts with known dropped questions and verify that the output flags every one before you ship.

IMPLEMENTATION TABLE

Prompt Variables

Each placeholder must be populated before the prompt is sent. Validation notes describe what the model needs to produce reliable output.

PlaceholderPurposeExampleValidation Notes

[CONVERSATION_TRANSCRIPT]

Full multi-turn conversation text with speaker labels and timestamps

USER [2025-01-15 14:03]: I need help with my billing and also the login issue... ASSISTANT [2025-01-15 14:04]: Let me look into the billing first...

Must include complete turns from session start to current. Validate that speaker labels are consistent and timestamps are parseable. Missing turns cause false negatives on resolved items.

[OPEN_ITEM_SCHEMA]

JSON schema defining required fields for each detected open item

{"type": "object", "properties": {"item_type": {"enum": ["question", "commitment", "task", "approval"]}, "description": {"type": "string"}, "source_turn": {"type": "integer"}, "status": {"enum": ["unresolved", "in_progress", "blocked"]}, "severity": {"enum": ["blocking", "high", "medium", "low"]}}, "required": ["item_type", "description", "source_turn", "status"]}

Validate that schema is valid JSON Schema draft-07 or later. Required fields must include item_type, description, source_turn, and status. Missing required fields cause downstream parsing failures in state management middleware.

[SESSION_METADATA]

Structured object with session identifier, start time, user ID, and channel context

{"session_id": "sess_9a7b", "started_at": "2025-01-15T14:00:00Z", "user_id": "usr_4821", "channel": "chat", "previous_sessions": ["sess_8c3d"]}

Validate that session_id is non-empty and started_at is ISO 8601. previous_sessions array may be empty but must be present. Null session_id causes carryover logic to fail for multi-session workflows.

[CLOSEOUT_POLICY]

Rules defining when a session may be closed and what constitutes unsafe closeout

{"allow_close_with_low_severity": false, "require_explicit_disposition": true, "disposition_options": ["resolved", "deferred_to_session", "acknowledged_by_user", "escalated"], "block_close_on": ["blocking", "high"]}

Validate that disposition_options is non-empty and block_close_on contains only valid severity values. Missing require_explicit_disposition defaults to false, which allows silent drops. Policy must be versioned for audit trail.

[CURRENT_STATE_OBJECT]

Existing tracked state of open items from prior turns, if any

{"open_items": [{"id": "oi_001", "item_type": "question", "description": "User asked about login error code E403", "source_turn": 3, "status": "unresolved", "severity": "blocking"}], "last_updated_turn": 7}

Validate that open_items array exists even if empty. Each item must have a unique id. Mismatch between source_turn references and actual transcript turns indicates state drift requiring reconciliation before closeout.

[OUTPUT_FORMAT]

Expected structure for the closeout checklist output

{"checklist": [{"item_id": "string", "description": "string", "severity": "string", "source_turn": "integer", "disposition_required": "boolean"}], "closeout_blocked": "boolean", "blocking_items": ["item_id"], "safe_to_close": "boolean", "warning_message": "string | null"}

Validate that closeout_blocked is true when blocking_items is non-empty. safe_to_close must be false when closeout_blocked is true. warning_message must be non-null when closeout_blocked is true. Schema mismatch causes downstream routing failures.

[REFUSAL_TEMPLATE]

Language template for refusing unsafe closeout when blocking items remain

"I cannot close this session yet. The following items require resolution before closing: {{blocking_items_list}}. Please address each item or explicitly defer it before attempting to close again."

Validate that template contains {{blocking_items_list}} placeholder. Template must not include markdown or HTML. Empty refusal when blocking items exist is a compliance failure. Test with 1, 3, and 10 blocking items to verify formatting.

[STALENESS_THRESHOLD_MINUTES]

Duration after which an unresolved item is considered stale and may be auto-retired

30

Must be a positive integer. Null disables auto-retirement. Values under 5 minutes risk retiring items the user is still actively addressing. Validate that auto-retired items still appear in the checklist with disposition 'auto_retired_stale' for audit trail.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the Session Closeout Checklist prompt into a production application with validation, refusal enforcement, and audit logging.

The Session Closeout Checklist prompt is designed to be the final gate before a session is terminated in a support, task, or copilot application. It should be invoked when the system detects a user intent to end the session, or when a session timeout is approaching. The prompt requires a structured list of all unresolved items from the conversation state as input. Do not call this prompt without first running a pending-item detection step; feeding it an empty or stale list will produce a false sense of closure. The prompt's primary job is to generate a user-facing checklist and enforce a refusal if the user attempts to close without explicit disposition on every item.

Wire this prompt into your application as a pre-closeout hook. The application must maintain a canonical list of unresolved items—questions, tasks, commitments, approvals—keyed by a stable ID. When a closeout event fires, serialize that list into the [UNRESOLVED_ITEMS] placeholder as a structured JSON array. The model will return a JSON response containing a checklist array and a closeout_permitted boolean. Your application must parse this response and enforce the refusal: if closeout_permitted is false, block the session close and display the generated checklist to the user. If true, proceed with closeout but log the final disposition of every item. Implement a retry loop with a maximum of 2 attempts if the output fails JSON schema validation; after that, escalate to a human reviewer rather than silently closing. Use a model with strong instruction-following and JSON mode enabled (e.g., GPT-4o, Claude 3.5 Sonnet) to minimize malformed refusals.

For high-stakes domains like healthcare, finance, or legal support, add a human-in-the-loop step after the checklist is generated but before the session is closed. The application should present the checklist and the model's proposed dispositions to a supervisor for sign-off. Log the full prompt, response, and human decision in an audit trail that includes timestamps, item IDs, and the identity of the reviewer. Avoid the failure mode where the model marks an item as 'resolved' based on weak evidence; your validation layer should cross-check each resolved item against the conversation transcript using a secondary verification prompt or deterministic rule. The most common production failure is the model generating a permissive closeout_permitted: true when items are only partially addressed—mitigate this by setting a high bar in the [CONSTRAINTS] block and testing with edge cases where the user provides vague confirmations like 'yeah that's fine' without actually resolving the underlying issue.

IMPLEMENTATION TABLE

Expected Output Contract

The model must return a JSON object matching this schema. Validate these fields in your application before acting on the output. This contract is designed for the Session Closeout Checklist Prompt, ensuring every open item is explicitly resolved before the session can be closed.

Field or ElementType or FormatRequiredValidation Rule

open_items

Array of objects

Must be an array. Can be empty. If the array contains objects, each must match the item schema below.

open_items[].id

String

Must be a non-empty string. Must be unique within the array. Validate no duplicates.

open_items[].description

String

Must be a non-empty string. Should be a concise summary of the unresolved question or task.

open_items[].source_turn

Integer or null

Must be an integer >= 1 if the item originated from a specific turn. Use null only if the item is implicit or from a pre-session context. Validate that the integer does not exceed the total number of turns in the provided transcript.

open_items[].severity

String

Must be exactly one of the allowed enum values: 'blocking', 'high', 'medium', 'low'. Validate against this closed set.

closeout_blocked

Boolean

Must be a boolean. If true, the session cannot be closed. Your application must enforce this by refusing the close action.

blocked_reason

String or null

Must be a non-empty string if closeout_blocked is true. Must be null if closeout_blocked is false. Validate this conditional logic.

user_facing_checklist

String

Must be a non-empty string. This is the markdown-formatted checklist for the user. Validate that it contains a list item for every object in the open_items array.

PRACTICAL GUARDRAILS

Common Failure Modes

What breaks first when a session closeout checklist is deployed in production, and how to prevent each failure before it reaches a user.

01

False Resolution: Assistant Marks Items Done That Weren't

What to watch: The model generates a checklist that incorrectly classifies an open item as resolved because the user said 'ok' or 'thanks' without actually confirming completion. The assistant conflates social acknowledgment with task resolution. Guardrail: Require explicit disposition keywords ('done', 'resolved', 'skip', 'carry forward') for each item. Validate that every resolved item has a corresponding user confirmation turn within the last N messages. Flag items where the user's last mention was only an acknowledgment.

02

Silent Omission: Open Items Missing from the Checklist

What to watch: The prompt fails to detect an open question or deferred task because it was stated implicitly, buried in a long message, or referenced with a pronoun that the model loses track of. The user sees a clean checklist and closes the session, but work is dropped. Guardrail: Run a dedicated open-item extraction prompt on the full transcript before generating the closeout checklist. Diff the extraction output against the checklist to detect omissions. If the counts don't match, refuse to present the checklist and re-extract.

03

Refusal Overreach: Assistant Blocks Legitimate Closeouts

What to watch: The refusal logic is too aggressive and prevents the user from closing a session when the remaining open items are low-severity, explicitly deferred by the user, or informational only. Users get trapped in a loop and abandon the session or escalate in frustration. Guardrail: Add a severity threshold to the refusal logic. Allow closeout when all remaining items are below the threshold or have been explicitly marked 'skip' by the user. Include a 'close anyway with open items' escape path that logs the decision for audit.

04

Checklist Fatigue: Too Many Low-Signal Items Overwhelm the User

What to watch: The prompt surfaces every micro-question, rhetorical question, and minor clarification as an open item. The user faces a 20-item checklist for a 5-minute conversation and starts ignoring the feature entirely. Guardrail: Filter the open-item list before checklist generation. Remove rhetorical questions, items the user explicitly said they'd handle offline, and clarifications that were resolved implicitly in the next turn. Keep only items that represent incomplete work or unanswered substantive questions.

05

Stale Context Poisoning: Old Items Resurface After Topic Shifts

What to watch: The user changed topics three times and the original open item is no longer relevant, but the checklist still presents it as pending. The user is confused or annoyed by the irrelevant re-surfacing. Guardrail: Run a staleness check on each open item before including it in the closeout checklist. If the conversation has moved to a new topic and the item hasn't been referenced in the last K turns, mark it as 'possibly stale' and ask the user whether to carry it forward or retire it.

06

Carryover Leak: Unresolved Items Silently Drop Across Sessions

What to watch: The user closes the session with items marked 'carry forward,' but the next session starts without them because the serialization failed, the session boundary wasn't detected, or the carryover prompt wasn't triggered. Work is lost between sessions. Guardrail: Persist the final closeout checklist state as a structured object in the session store. On next session start, run a carryover prompt that reads the prior state and re-introduces carried-forward items. Validate that the carryover count matches the prior session's unresolved count. Alert if mismatch.

IMPLEMENTATION TABLE

Evaluation Rubric

Test output quality against these criteria before deploying to production. Run on a golden dataset of at least 20 session closeout scenarios.

CriterionPass StandardFailure SignalTest Method

Open Item Recall

Checklist includes every unresolved question, deferred task, and pending approval from the session transcript with a turn reference.

An open item present in the transcript is missing from the checklist without an explicit retirement reason.

Diff golden transcript annotations against generated checklist items; measure recall at >= 0.95.

False Positive Rate

No item is flagged as unresolved if the transcript shows explicit resolution, user dismissal, or implicit resolution confirmed by a follow-up turn.

A resolved item appears in the checklist as open, or a rhetorical question is flagged as a pending action.

Count false positives in golden dataset; target rate <= 0.05 per session.

Disposition Requirement

Each checklist item is presented with a required explicit disposition: Resolved, Defer to [TIMEFRAME], or Cancel. No item is left without a decision prompt.

An item is listed without a corresponding disposition prompt, or the prompt accepts an empty or ambiguous response.

Schema validation: every item in the output must have a non-null disposition_prompt field.

Unsafe Closeout Refusal

If any item remains without a Resolved or Cancel disposition, the assistant refuses to close the session and returns the unresolved items with a warning.

Assistant allows session closeout when one or more items are still in a pending or deferred state without user acknowledgment.

Inject a closeout request with a known unresolved item; assert refusal response and presence of the item in the warning.

Severity Ordering

Checklist items are ordered by severity: blocking items first, then time-sensitive, then informational. Severity is derived from dependency impact and user sentiment signals.

A blocking dependency appears below an informational note, or severity is assigned arbitrarily without transcript evidence.

Pairwise ranking test on 50 annotated item pairs; measure Kendall tau correlation >= 0.85 against human severity labels.

Staleness Flagging

Items older than [STALENESS_THRESHOLD_HOURS] or made irrelevant by subsequent turns are flagged as Possibly Stale with a recommendation to confirm relevance.

A question answered implicitly three turns ago is presented as still open, or a stale item is presented with the same urgency as a fresh one.

Inject a session where a question is implicitly resolved; assert the item is flagged stale or retired, not presented as active.

Output Schema Compliance

Output is valid JSON matching the [OUTPUT_SCHEMA] with all required fields present and no extra fields.

Output is missing required fields, contains malformed JSON, or includes fields not defined in the schema contract.

Parse output with schema validator; assert zero validation errors on required fields and no additional properties.

Tone and User Experience

Checklist language is neutral, non-alarming, and action-oriented. Refusal language acknowledges user intent without blame.

Checklist uses alarming language (e.g., CRITICAL FAILURE), blames the user for unresolved items, or is overly apologetic.

LLM-as-judge eval with a tone rubric; pass threshold >= 4/5 on professionalism and actionability scales across 20 samples.

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Start with the base prompt and a simple JSON schema for the checklist items. Use a single model call with the full conversation transcript as [CONVERSATION_HISTORY]. Skip the refusal logic and focus on getting the detection and checklist generation working first.

Add a lightweight post-processing step that parses the JSON and renders it as a user-facing message. Use a simple count check: if open_items.length > 0, show the checklist; otherwise, show a confirmation that nothing is pending.

Watch for

  • The model marking rhetorical questions or small talk as unresolved items
  • Checklist items that are too vague to act on (e.g., "follow up on the thing")
  • The model failing to detect implicit commitments like "I'll check on that"
  • No validation on the output schema, so malformed JSON breaks the rendering
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.