--- name: call-sycophancy-guard description: Offline experimental CALL-E transcript helper that detects pushback against goal-grounded facts and classifies the agent's response (HOLDS, CAPITULATES, VERIFIES, UNADDRESSED), flags capitulated values that tainted the final confirmation, and crafts anti-capitulation goals. It is not a measure of the agent's intent, proof the callee was wrong, or authorization to act on the call's outcome. license: MIT --- # call-sycophancy-guard > **An agent that agrees with everything confirms nothing.** Language models are demonstrably sycophantic: trained on human feedback, they affirm users far more often than humans do, and that behavior survives into deployed assistants. On a phone call this has a specific cost: the callee pushes back on a fact - "no, it's $50" - and the agent folds, not because it saw evidence, but because agreeing is polite. The closing confirmation then repeats the adopted value, and whatever parses that outcome writes a fact nobody established. This skill catches exactly that sequence. ## When To Use - after any CALL-E call whose result contains amounts, dates, or times the callee disputed, and before the outcome is written anywhere - with the goal text (or plan JSON) the call was built from, so ground facts can be extracted and checked against adopted values - before placing a fact-bearing call, to craft a goal that holds facts without being rude ## When Not To Use - to prove the callee was wrong: a capitulation is an unverified stance switch, and the callee holding a paper invoice may well be right; the card routes to verification, never to reversal - to detect emotional pressure or hostility; use `call-fraud-shield` for scam patterns and `call-emotional-contagion-monitor` for affect - during a call; this is strictly post-call analysis plus pre-call goal crafting, because CALL-E exposes transcripts, not live audio ## Workflow ### Audit a finished call ```bash python3 scripts/sycophancy_guard.py analyze --transcript path/to/call-result.json \ [--goal-file path/to/goal.txt] ``` Reads the real `get_call_run` result shape (`{status, result: {transcript}}`) or the flat shape used by sibling skill fixtures. The goal file is plain text or a JSON with a `goal` field. Emits a card: - `goal_facts`: amounts, dates, times extracted from the goal text - `pushback_events[]`: turn index, masked span, the responding agent turn, and its `stance`: - `HOLDS` - restates the record ("our records show $45") - `CAPITULATES` - adopts the contradicting value ("you're right, it is $50") without verifiable evidence - `VERIFIES` - defers to an independent channel (statement number, callback colleague, transfer) - `UNADDRESSED` - pivots away - `outcome_taint`: true when a capitulated value (a digit absent from the goal facts) reappears in a closing confirmation turn - `verdict`: `CLEAN` / `PRESSURE_TAINTED` / `UNCERTAIN` (`UNCERTAIN` when pushback was left unaddressed; stance classification runs without a goal file too, but goal facts are then empty and the taint check keys on the transcript's digits alone) - `fields_to_verify_via_second_channel` and the matching recommended action ### Craft the anti-capitulation goal ```bash python3 scripts/sycophancy_guard.py craft --scenario fact-bearing-call ``` Emits the plan_call inputs JSON whose goal instructs the agent to hold stated facts, offer independent verification, adopt a caller's value only on verifiable information, and record both values when disagreement survives to the end. ## Scientific Foundation | Research | Relevance | |---|---| | Towards Understanding Sycophancy in Language Models (Sharma et al., ICLR 2024, arXiv 2310.13548) | Establishes sycophancy as a stable property of feedback-trained assistants and its human-feedback cause - the failure mode this skill audits | | Sycophantic AI decreases prosocial intentions and promotes dependence (Cheng et al., Science 391(6792):eaec8352, 2026, doi:10.1126/science.aec8352) | Measures the downstream harm: models affirm users' actions roughly 49-50% more often than humans, and sycophantic affirmations change what users then do | | SycEval: Evaluating LLM Sycophancy (Fanous et al., AIES 2025, arXiv 2502.08177) | Multi-turn sycophancy measurement; its progressive-opinion-shift framing informs this skill's pushback-then-stance sequence over a call | Citation notes recorded during verification: the Cheng et al. paper is in Science Vol 391 Issue 6792 (journal version 2026; preprint arXiv 2510.01395, October 2025), and SycEval appeared at AIES 2025 (AAAI/ACM Conference on AI, Ethics, and Society), not the AAAI main track. This skill detects overt stance switches in text only; it has no access to the agent's internals and labels every output `analysis_mode: "heuristic"`. ## Differences from sibling skills - `call-emotional-contagion-monitor` tracks affect transferring between speakers; this skill tracks epistemic stance - what the agent claims is true - under social pressure. - `call-negotiation-coach` coaches strategy (BATNA, concessions) where flexibility is legitimate; this skill guards facts where folding without evidence corrupts the record. - `call-rlhf-self-reflection-scorer` judges overall call quality; this skill isolates one specific, well-documented failure mode and ties it to outcome integrity. - `call-review` checks claim support in the transcript; it does not ask whether the agent switched positions mid-call under pressure.