call-cognitive-load-monitor · git:20260918.cabb6bf · 2026-09-18 · sha256 16cb52264cfafe36

call-cognitive-load-monitor git:20260918.cabb6bfA

Immutable. This exact content is served forever at /api/v1/blob/16cb52264cfafe36.

---
name: call-cognitive-load-monitor
description: Offline experimental CALL-E transcript heuristics for repetition, confusion phrases and conversational proxies, with advisory scores and script suggestions for human review; not a cognitive assessment or consent determination.
license: MIT
---

# call-cognitive-load-monitor

> **Detect when your caller is overwhelmed — before it costs you the call.**

This skill analyzes supplied text for heuristic confusion markers and conversational proxies. It does not measure acoustics, administer a cognitive assessment, or establish consent validity. Reports and suggested script changes require human review; no live integration, message sending or follow-up call is performed.

---

## Why This Skill Exists

Most call-centre quality tools measure whether the **agent** performed well. This skill measures whether the **caller** was able to process what was said. When cognitive load peaks — especially at closing, where consent and commitment are given — the validity of that interaction is at risk.

**Advisory scope**: A `CONSENT_AT_RISK` label is a suggestion for human review, not a regulatory finding or authorization for a follow-up call. No label establishes that consent is valid or invalid.

---

## Research Scope

The weights and thresholds are unvalidated demonstration choices, not a reproduction of a published acoustic model. Background and claim limitations: [`references/research-papers.md`](references/research-papers.md).

---

## Quick Start

```bash
python3 scripts/monitor_cognitive_load.py \
  --transcript path/to/transcript.json \
  --dry-run \
  --out /tmp/load_report.json
```

### Validate output schema

```bash
python3 scripts/validate_load_report.py --report /tmp/load_report.json
```

---

## Input

Standard CALL-E transcript — same two formats as other skills:

**Format A — array of turns:**
```json
[
  {"role": "agent",  "text": "Under the terms of sub-clause 4(b)(ii) of the agreement..."},
  {"role": "callee", "text": "Sorry, could you say that again? I'm not following."},
  {"role": "agent",  "text": "Of course. Regarding the billing section specifically..."},
  {"role": "callee", "text": "I still don't understand. What does that mean for me?"}
]
```

---

## Output — Overload Report

```json
{
  "call_id": "calle-001",
  "analysis_timestamp": "2026-09-17T08:00:00Z",
  "overall_cognitive_load": "HIGH",
  "load_score": 0.78,
  "load_by_phase": {
    "opening":  0.12,
    "middle":   0.45,
    "closing":  0.78
  },
  "peak_phase": "closing",
  "overload_signals": [
    {
      "type": "repetition_request",
      "evidence": "Sorry, could you say that again?",
      "turn": 4,
      "phase": "middle",
      "weight": 0.30
    },
    {
      "type": "confusion_phrase",
      "evidence": "I still don't understand. What does that mean for me?",
      "turn": 6,
      "phase": "middle",
      "weight": 0.25
    },
    {
      "type": "jargon_density_spike",
      "evidence": "sub-clause 4(b)(ii) of the agreement",
      "turn": 3,
      "phase": "middle",
      "weight": 0.18
    }
  ],
  "interaction_dynamics": {
    "turn_imbalance_score": 0.62,
    "avg_silence_gap_ms": 2800,
    "overlap_count": 0,
    "participation_ratio": {"agent": 0.74, "callee": 0.26}
  },
  "script_patches": [
    {
      "original": "Under the terms of sub-clause 4(b)(ii) of the agreement",
      "suggested": "According to our billing rules",
      "rationale": "Legal jargon removed; Flesch-Kincaid grade reduced from 18 to 6"
    }
  ],
  "consent_validity_flag": "AT_RISK",
  "consent_validity_reason": "Load score 0.78 exceeded threshold 0.65 during closing phase where commitment was recorded.",
  "recommended_action": "SEND_WRITTEN_CONFIRMATION",
  "false_positive_disclaimer": "Cognitive load inference is probabilistic. A flagged call does not constitute a legal finding. Human review is required before any adverse action.",
  "flags": ["REQUIRES_HUMAN_REVIEW", "JARGON_DENSITY_HIGH"],
  "analysis_mode": "heuristic",
  "schema_version": "1.0"
}
```

---

## Cognitive Load Signals

### Linguistic Markers

| Signal Type | Example | Weight |
|---|---|---|
| `repetition_request` | "Could you repeat that?" / "Say that again?" | 0.30 |
| `confusion_phrase` | "I don't understand" / "I'm lost" / "What does that mean?" | 0.25 |
| `self_correction` | "Wait, I mean... actually..." | 0.15 |
| `clarification_request` | "So what you're saying is...?" | 0.20 |
| `jargon_density_spike` | Technical / legal terminology per 50-word window | 0.18 |
| `hedge_word_cluster` | "I think", "maybe", "I'm not sure" (3+ in one turn) | 0.12 |

### Interaction Dynamic Markers

| Signal Type | Threshold | Significance |
|---|---|---|
| `turn_imbalance` | Agent:Callee ratio > 3:1 | Agent dominating — callee cannot process |
| `long_silence_gap` | > 2 500 ms | Callee processing delay — indicates high extraneous load |
| `participation_drop` | Callee turns drop ≥ 40% in closing phase | Cognitive withdrawal |

### Load Levels

| Load Score | Level | Recommended Action |
|---|---|---|
| < 0.35 | `LOW` | `PROCEED` |
| 0.35–0.64 | `MEDIUM` | `FLAG_FOR_REVIEW` |
| 0.65–0.84 | `HIGH` | `SEND_WRITTEN_CONFIRMATION` |
| ≥ 0.85 | `CRITICAL` | `REPEAT_CALL_WITH_SIMPLER_SCRIPT` |

---

## Consent Validity Flags

| Flag | Trigger | Meaning |
|---|---|---|
| `CONSENT_VALID` | Load < 0.65 during closing | Caller was processing normally when consenting |
| `CONSENT_AT_RISK` | Load ≥ 0.65 during closing | Caller may have consented under cognitive strain |
| `CONSENT_UNKNOWN` | Closing phase not identifiable | Transcript structure too short to assess |

> [!CAUTION]
> `CONSENT_AT_RISK` does not mean consent is invalid. It flags the call for human review and recommends sending written confirmation. Never use this flag as a standalone legal determination.

---

## Command-Line Reference

```
usage: monitor_cognitive_load.py [-h] --transcript TRANSCRIPT
                                 [--threshold THRESHOLD]
                                 [--dry-run]
                                 [--out OUT]

options:
  --transcript   Path to the transcript JSON file (required)
  --threshold    Load score above which level is HIGH (default: 0.65)
  --dry-run      Analyse without side effects
  --out          Write report JSON to this path (default: stdout)
```

---

## Integration with CALL-E

Insert as a **post-call QA step** in any pipeline where consent or commitment is recorded:

```
[call ends] → [transcribe] → [monitor_cognitive_load.py]
                                        ↓
                   load=HIGH → send written confirmation email
                   load=CRITICAL → schedule follow-up call with simplified script
```

Combine with `client-persona-profiler`: Analytical (C) and Steady (S) callers have lower jargon tolerance — flag their calls at a lower threshold.

---

## Privacy & Safety

- Reports contain copied transcript evidence and script-patch text and may contain private data. Keep real-input reports local and access-controlled; use synthetic inputs for examples and tests. Do not publish reports without review.
- The separate `validate_load_report.py` check is not automatically run before writing and is not a complete PII redactor or privacy guarantee.
- The consent-validity flag is **advisory only**. A human must review before any regulatory or legal action.

Full safety reference: [`references/safety.md`](references/safety.md)

## Expected Outcomes & Metrics

The following numbers are unvalidated design targets, not measured results.

| Metric | Expected Target | Notes |
|---|---|---|
| Latency | < 50ms per transcript | Evaluates locally without LLM dependencies. |
| TPR (True Positive Rate) | > 85% | Identifies cognitive strain in human-annotated datasets. |
| FPR (False Positive Rate) | < 10% | Some benign clarification requests may be flagged. |

---

## Limitations & Known Constraints

- **Text-Only Modality**: Cannot detect sighs, actual silence duration, or exasperated tone. Silence and load fields are text-based proxies, not acoustic measurements.
- **Prototype options**: `--threshold` is currently accepted but unused; reported levels use built-in constants. Short transcripts and a `CONSENT_VALID` label do not prove that a closing phase or consent occurred.
- **ASR Dependency**: If the ASR mistranscribes "I'm lost" as "I boss", the signal is missed.
- **Language Bias**: Heuristics are currently calibrated exclusively for English.

---

## Files

```
skills/call-cognitive-load-monitor/
├── SKILL.md
├── scripts/
│   ├── monitor_cognitive_load.py      ← Main analysis runner
│   ├── validate_load_report.py        ← Output schema validator
│   └── test_cognitive_load.py         ← Test suite (50+ assertions)
└── references/
    ├── example-transcript.json        ← High-load example transcript
    ├── examples.md                    ← Usage examples
    ├── research-papers.md             ← Full citations
    └── safety.md                      ← Consent-validity ethics guide
```