Multi-Turn Red Team Strategies
Multi-turn strategies use an attacker agent to coerce the target over multiple conversation turns. Particularly effective against stateful applications where they can convince the target to act against its purpose over time. Highest success rates (70-90% ASR) but most resource-intensive. All single-turn strategies can be applied to multi-turn apps, but multi-turn strategies require a stateful application.
Use this skill when
- Testing stateful chatbots or agents that maintain conversation history
- Gradually escalating prompt harm over multiple turns (
crescendo) - Running adaptive multi-turn branching with persistent scan-wide memory (
hydra) - Using IICL-inspired encoding/math/logic exploration (
goblin) - Using Meta's GOAT (Generative Offensive Agent Tester) approach (
goat) - Simulating a persistent, creative mischievous user (
mischievous-user) - Testing conversation-based attacks with backtracking and escalation
Do not use this skill when
- Testing a single-turn (stateless) LLM app → use
promptfoo-strategies-dynamic - You need static encoding bypasses → use
promptfoo-strategies-static - You need indirect prompt injection via web pages → use
promptfoo-strategies-indirect-injection - You need custom or regression strategies → use
promptfoo-strategies-custom-regression - The target app doesn't maintain conversation state (multi-turn strategies require stateful apps)
🛡️ Edge cases (mandatory handling)
- Multi-turn strategies require a stateful application — all single-turn strategies can be applied to multi-turn apps, but multi-turn strategies require the target to maintain conversation state.
stateful: truevsfalse—false(default) replays the full transcript each turn (for stateless targets that expect full history);truesends only the newest turn (target must preserve earlier turns via cookies, server session, or OpenAI Agents session factory).hydraandgoblinrequire Promptfoo Cloud — they need Cloud to coordinate the attacker agent, maintain scan-wide learnings, and manage branching logic.maxTurnsandmaxBacktracks— increasing these makes strategies more aggressive but slower and costlier. Defaults:maxTurns: 10,maxBacktracks: 10(for hydra/goblin),maxTurns: 5(for crescendo/goat/mischievous-user).continueAfterSuccess— by default, crescendo and goat stop on first successful attack. SetcontinueAfterSuccess: trueto find additional attack vectors (longer, costlier).- Unblocking feature — disabled by default. Enable with
PROMPTFOO_ENABLE_UNBLOCKING=truewhen testing conversational agents that ask clarifying questions (customer service bots, domain assistants). Adds API calls and cost. - Backtracking — on refusals, multi-turn strategies rewind to an earlier point and try a different approach. Only works in stateless mode (
stateful: false). SetmaxBacktracks: 0automatically whenstateful: true. - High cost — multi-turn strategies are the most resource-intensive. Run on a smaller number of tests/plugins, with a cheaper provider, or prefer a simpler iterative strategy.
conversationIdviatransformVars— required for stateful targets; settransformVars: '{ ...vars, conversationId: context.uuid }'.
🎯 Core workflow
- Choose strategy — load
references/strategy-selection.mdfor the decision matrix (crescendo vs hydra vs goblin vs goat vs mischievous-user). - Configure stateful mode — load
references/stateful-mode.mdforstateful: truevsfalse,conversationId, session management. - Configure crescendo — load
references/crescendo.mdfor gradual escalation,maxTurns,continueAfterSuccess, backtracking. - Configure hydra — load
references/hydra.mdfor adaptive branching, persistent memory, Cloud requirement,maxBacktracks. - Configure goblin — load
references/goblin.mdfor IICL-inspired exploration, encoding shifts. - Configure goat/mischievous-user — load
references/goat-mischievous.mdfor GOAT and mischievous user configs. - Unblocking feature — load
references/unblocking.mdfor handling clarifying questions from the target. - Checklist — run
references/checklist.mdbefore declaring done.
🎯 Core principles (summary)
- Multi-turn = highest ASR (70-90%) but highest cost — use for stateful apps where single-turn strategies aren't enough.
crescendo— gradual escalation inspired by Microsoft Research. Starts benign, increases harm each turn. Backtracks on refusals.hydra(recommended for multi-turn) — adaptive branching with persistent scan-wide memory. Pivots to different approaches. Requires Cloud. Best for stateful agents with evasive defenses.goblin— Hydra mechanics with IICL-inspired attacker prompt (abstract few-shot pattern completion, encoding shifts).goat— Meta's GOAT (Generalized Offensive Adversarial Testing) research. Iteratively refines attack templates over multiple turns.mischievous-user— simulates a persistent, creative user trying different phrasings over several turns. Lower ASR (10-20%).stateful: truesends only the newest turn;stateful: false(default) replays full transcript. Choose based on your target's session handling.- Backtracking only in stateless mode — on refusal, rewinds and tries a different approach up to
maxBacktrackstimes. continueAfterSuccess: truefinds additional attack vectors beyond the first success.
📦 Strategy catalog
| Strategy | ID | ASR Increase | Cost | Cloud? | Description |
|---|---|---|---|---|---|
| Crescendo | crescendo |
70-90% | High | No | Gradual escalation with backtracking |
| Hydra | jailbreak:hydra |
70-90% | High | Yes | Adaptive multi-turn branching with persistent memory |
| Goblin | jailbreak:goblin |
70-90% | High | Yes | IICL-inspired encoding/math/logic exploration |
| GOAT | goat |
70-90% | High | No | Generative Offensive Agent Tester (Meta research) |
| Mischievous User | mischievous-user |
10-20% | High | No | Persistent creative user simulations |
References
references/strategy-selection.md— decision matrix: which multi-turn strategy for which goalreferences/stateful-mode.md—stateful: truevsfalse,conversationId, session management, provider configreferences/crescendo.md— gradual escalation config,maxTurns,continueAfterSuccess, backtracking, example scenarioreferences/hydra.md— adaptive branching, persistent memory, Cloud requirement,maxBacktracks, config optionsreferences/goblin.md— IICL-inspired exploration, encoding shifts, when to usereferences/goat-mischievous.md— GOAT and mischievous user configs,maxTurns,continueAfterSuccessreferences/unblocking.md— handling clarifying questions,PROMPTFOO_ENABLE_UNBLOCKING=true, tradeoffsreferences/checklist.md— strategy selection, stateful mode, config, cost, post-run checklist