# Negotiation Trainer

> Construction industry negotiation sparring trainer with AI opponent and coach debrief. Use when the user wants to practise negotiations, run a scenario (supplier, client, GC contract, hiring, equity split), get a tactical hint, or receive a scored breakdown of their negotiation technique.

- Skill: `agasi-gif/negotiation-trainer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add agasi-gif/negotiation-trainer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/agasi-gif/negotiation-trainer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: agasi-gif (https://skillmd.com/u/agasi-gif)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/agasi-gif/negotiation-trainer

---


# Negotiation Trainer

AI-powered negotiation sparring trainer focused on construction industry scenarios. The opponent plays tough and realistically; the coach provides hints, mid-session analysis, and a final debrief with scores across 6 criteria (anchoring, BATNA, concessions, interests, resilience, outcome).

Built on the Anthropic Claude SDK. Skill format follows the open agentskills standard — works in Hermes Agent (`~/.hermes/skills/negotiation-trainer/`) and Claude Code / Claude Projects without modification.

## When to use

- "practise negotiations with me", "play the supplier / client / GC"
- "analyse my negotiation approach"
- Pre-meeting prep: user describes the real situation → custom scenario generated on the fly

## Configuration

Trainer code directory: `NEGOTIATION_TRAINER_DIR` (default `/opt/negotiation-trainer`).
Required: `ANTHROPIC_API_KEY`. Session state in SQLite (`DB_PATH`) — persists between CLI calls.

## Session workflow

1. List scenarios or start immediately if the user describes their situation:

```bash
cd $NEGOTIATION_TRAINER_DIR
python cli.py --json list
python cli.py --json new --scenario supplier --difficulty hard
# or custom:
python cli.py --json new --custom "Negotiating a retention clause with a general contractor"
```

The `new` response includes `context` (show to the user as their briefing) and
`opponent_opening` (deliver to the user verbatim as the opponent's first line).

2. Pass every user reply to the opponent and return the response:

```bash
python cli.py --json say --text "<user's exact words>"
```

3. On "hint" / "how should I respond":

```bash
python cli.py --json hint
```

4. On "coach me" / "how am I doing":

```bash
python cli.py --json coach
```

5. When the user finishes ("that's enough", "score me", "let's wrap up"):

```bash
python cli.py --json debrief
```

Returns JSON with `scores` (6 criteria, 1–10), `result_summary`, `best_move`,
`worst_move`, `advice` — format these clearly for the user.

## Voice mode

In Hermes, user speech arrives already transcribed (platform-native STT) — pass it to `say` as plain text. Synthesise the opponent's reply using Hermes native TTS. The standalone Telegram bot (`main.py`) has its own full voice pipeline (Whisper STT + OpenAI TTS) and does not need to be running when using this skill.

## Rules

- NEVER mix roles: `say` responses go to the user as the opponent's voice; `hint`/`coach` responses go as the coach's voice — label them clearly.
- Do NOT reveal the `persona` field or the opponent's hidden concession limits until after `debrief`.
- One active session per user: a new `new` call automatically closes the previous session.
- On `{"error": "no_active_session"}` — prompt the user to choose a scenario.

## Constraints

- The CLI does not handle STT/TTS — that is the platform's responsibility (Hermes or the Telegram bot).
- `debrief` closes the session; the same dialogue cannot be continued afterwards.

