# Cxas Loss Analysis

> Retrieves non-contained CCAI Insights conversations (losses), uses agent intelligence to cluster them into common failure patterns, and generates a markdown report. Use when you need to analyze failure patterns and build targeted regression/evaluation reports.

- Skill: `googlecloudplatform/cxas-loss-analysis` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add googlecloudplatform/cxas-loss-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/googlecloudplatform/cxas-loss-analysis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: GoogleCloudPlatform (https://skillmd.com/u/googlecloudplatform)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/googlecloudplatform/cxas-loss-analysis

---


# Insights Loss Analysis & Report Generator

This skill instructs you (the AI Agent) to retrieve recent conversations from CCAI Insights, isolate escalated/non-contained sessions (losses), analyze their root causes to group them into failure patterns, and write a professional Markdown report.

---

## Execution Routine

Follow these steps in exact sequence:

### Step 1: Parameter Verification
Verify that the user has provided the following required parameters:
- `project_id`: GCP Project ID hosting Insights.
- `location`: Insights location (e.g., `us`).
- `app_id`: Target CXAS App ID (e.g., `db9ee866-28db-458b-b835-78137c974779`).
- `output_dir`: Directory where the final report and test cases will be saved.

And the following optional parameters if they wish to scope the analysis:
- `start_time`: RFC 3339 timestamp for start of time period (e.g., `2026-05-20T00:00:00Z`).
- `end_time`: RFC 3339 timestamp for end of time period (e.g., `2026-05-26T23:59:59Z`).
- `filter`: Custom API filter string to apply (overrides the default loss filter `-labels.sessionContained="true"`).
- `limit`: Maximum conversations to retrieve and process (default: 500).

### Step 2: Extract Loss Transcripts
Run the lightweight data-extraction script to dump the loss transcripts into chunked JSON files in your workspace.

**Command Template**:
```bash
python3 -P .agents/skills/cxas-loss-analysis/scripts/fetch_losses.py \
  --project-id "{project_id}" \
  --location "{location}" \
  --app-id "{app_id}" \
  --limit {limit} \
  --output-file "{output_dir}/raw_losses.json" \
  [--start-time "{start_time}"] \
  [--end-time "{end_time}"] \
  [--filter "{filter}"]
```

*Note: Always run python using the virtual environment's executable with the `-P` flag (e.g., `.venv/bin/python -P`) to avoid path pollution.*

### Step 3: Read Transcripts & Summarize Escalations
Use the `view_file` or other file-reading tools to read the generated `{output_dir}/raw_losses.json` file. Extract the list of `chunks` (which contains paths to the chunked JSON files).

For each chunk file in the `chunks` list:
1. Read the chunk file to load the batch of transcripts.
2. For each conversation transcript:
   a. Analyze the conversation between the customer (`user`) and the virtual agent (`agent`).
   b. Identify if the user displayed **"AI aversion"**:
      - **Definition**: Sessions where the user did not meaningfully engage with the agent or expressed a strong preference for a human agent (e.g., immediately asking for "human", "agent", "representative" in the first 1-2 turns without describing their issue, or explicitly stating they do not want to talk to an AI/robot).
      - If "AI aversion" is detected, mark this session as **ignored** from the core loss analysis. Note the reason (e.g., *"AI aversion: User demanded human agent immediately"*).
   c. For non-ignored genuine losses:
      - Identify why the conversation escalated or was not contained.
      - Formulate a concise, **1-sentence primary reason for failure/escalation** (max 20 words). E.g., *"Virtual agent failed to authenticate the user due to repeated pin entry errors."*


### Step 4: Cluster Failures into Loss Patterns
Review the complete list of genuine (non-ignored) failure reasons you generated in Step 3. Using your analytical capabilities, group these failure reasons into **8 to 10 distinct, mutually exclusive failure patterns** to provide granular insights.

For each pattern, define:
1. **Pattern ID**: A simple key (e.g., `pattern_1`, `pattern_2`, ...).
2. **Name**: A short, descriptive name (e.g., *"Authentication Loop"*, *"Unsupported Customer Intent"*, *"Agent Transfer on Disambiguation"*).
3. **Description**: A clear 1-2 sentence description explaining the pattern and what triggers it.


### Step 5: Categorize All Sessions
Map every analyzed `conversation_id` to either:
- One of the 8 to 10 defined failure patterns.
- `ignored_ai_aversion` if the user displayed AI aversion.

Keep track of this mapping for the final report.

### Step 6: Write the Markdown Report
Compile your analysis into a structured Markdown report and write it to `{output_dir}/loss_patterns_report.md`. Use the following structure:

```markdown
# Loss Patterns Analysis Report

**Project**: `{project_id}`
**App ID**: `{app_id}`

## Executive Summary

A sample of up to {limit} conversations matching the filter was selected for detailed manual analysis and clustering to identify key patterns.

## Loss Patterns Distribution

| Pattern ID | Name | Count | Percentage of Genuine Losses |
| --- | --- | --- | --- |
| `pattern_1` | Pattern Name | Count | Pct% |
| ... | ... | ... | ... |

*Note: Ignored AI aversion sessions are excluded from the pattern distribution.*

## Detailed Patterns Breakdown

### `pattern_1`: Pattern Name

**Description**: Pattern description.
**Total Conversations**: Count

#### Examples & Failure Reasons:
- **Session `{conversation_id_1}`**: Failure reason from Step 3.
- **Session `{conversation_id_2}`**: Failure reason from Step 3.

---

## Appendix: Ignored Sessions (AI Aversion)
The following sessions were ignored from the pattern analysis because the user displayed AI aversion:
- **Session `{conversation_id_3}`**: AI aversion reason (e.g., *"User demanded human agent immediately"*).
- **Session `{conversation_id_4}`**: AI aversion reason.
```


### Step 7: Present Summary to User
Present a clear summary of your findings directly in the chat, pointing the user to `{output_dir}/loss_patterns_report.md` and highlighting the key patterns and the adjusted containment rate.


