Skip to content

Playbook (Information-first / Conversion-first)

Overview

The Playbook decides how proactively the agent steers a visitor toward a demo. It is a single per-client setting — behavior.playbook — with two values:

Value UI label Posture
information (default) Information-first Answer thoroughly and let visitors self-serve; offer a demo only when they are clearly ready or ask for one.
conversion Conversion-first Act as an SDR — build interest, keep answers non-terminal, and guide qualified visitors toward a demo.

The playbook shapes when the demo CTA (👇) fires and how buyer-intent answers are written. It does not change what the agent knows or which facts it retrieves.

How It Works

flowchart TD A[Buyer-intent turn] --> B{behavior.playbook} B -->|information| C[Score-gated demo\ninterest_score timing] B -->|conversion| D[Readiness-judge timing\n+ lower demo floor] C --> E[Standard answer\ndemo_offer / clean_ending] D --> F[Inject conversion_selling\nSPIN discovery close] F --> G[demo_offer_conversion /\ncontext_gathering_conversion variants]

Information-first (default)

  • Demo timing follows behavior.demo_timing (default interest_score): the demo is offered once the accumulated interest score crosses the client threshold.
  • No selling shape is injected — answers are complete and can end cleanly.
  • Standard response-ending skills (demo_offer, context_gathering, clean_ending).

Conversion-first

  • Demo timing is forced to readiness_judge regardless of the stored demo_timing — the score floor pitches too early for an SDR motion (get_demo_timing).
  • Lower, turn-aware demo floor so a genuine buying signal converts without waiting several turns: turn 1 requires strong intent (CONVERSION_TURN1_INTEREST_FLOOR = 4), turns 2+ use CONVERSION_INTEREST_FLOOR = 2.
  • conversion_selling answer-shaping skill is injected on LEARN/CONTEXT buyer turns (_inject_conversion_selling): value → grounded reframe → forward-step (SPIN discovery question), no fabricated numbers.
  • Hidden skill variants resolve from the playbook flag (skill_registry): demo_offerdemo_offer_conversion (demo-first), context_gatheringcontext_gathering_conversion (SPIN discovery).
  • Pacing guards prevent nagging:
    • Pre-demo discovery hold — the first auto-pitch is held through turns 2–3 so discovery runs first (is_conversion_predemo_discovery).
    • Cadence cap — no automatic re-pitch two turns running (is_conversion_cadence_skip).
    • Explicit BOOKING intent bypasses both — an on-demand "book a demo" always converts.

Configuration

Set on the Brand & tone screen (Config Studio) under Playbook, or via the CLI:

rose-config set behavior.playbook --site <domain>   # information | conversion

Staff / playground override

The playground exposes a per-request override so staff can preview either playbook without a config write. It is read from localStorage['rose_preprod_playbook_override'] and sent as the playbook field on the chat request. Production widget traffic ignores it — real visitors always resolve from client config.

# rose-chat (no config write)
rose-chat "<buying question>" --site <domain> --env staging --config behavior.playbook=conversion

Backward compatibility

The field was renamed from sales_motion and its values from self_serve/sales_led (IX-4119). Stored client overrides still carrying the old key/values are coerced on read by the resolver — self_serve → information, sales_led → conversion — so no data migration is required. The request field and playground also still accept the legacy values.

Key Files

File Purpose
schemas/configs/website/behavior.schema.json playbook config field
ixchat/utils/agent_config.py get_playbook, get_demo_timing (forces judge for conversion)
ixchat/utils/demo_proposal.py turn-aware floor, is_conversion_cadence_skip, is_conversion_predemo_discovery
ixchat/nodes/skill_applier_rules.py _inject_conversion_selling, _rule_force_context_gathering_for_conversion, _rule_suppress_demo_repitch
ixskills/ixskills/skill_registry.py resolves *_conversion skill variants from the playbook flag
ixconfig/ixconfig/resolver.py legacy sales_motionplaybook normalizer (shim)
prompts/website-agent/skills/**/{conversion_selling,demo_offer_conversion,context_gathering_conversion} conversion-first skills