Concepts

Proactive Triggers

A raw LLM is reactive — it only speaks when spoken to. Humane's Proactive Engine watches behavioral state and reaches out when thresholds are crossed. Mood crashes, silent users, trust milestones — your product can act without the user initiating.

Built-in triggers

Five ship with the engine:

TriggerFires whenDefault cooldown
proactive.mood_dropmood < 0.360m
proactive.energy_lowenergy < 0.25120m
proactive.trust_milestonetrust > 0.7 & interactions > 101440m
proactive.user_inactivelast_seen > 48h1440m
proactive.engagement_dropcompound (interactions, familiarity, last_seen, mood)720m

What happens when a trigger fires

  • A webhook of type proactive.{trigger_name} is dispatched to your endpoints (HMAC-signed).
  • If you have a Slack / Discord integration, the rich message lands in your channel with an "Open patient session" deep-link.
  • A row is written to proactive_triggers with the timestamp — powers cooldowns, survives restarts.
  • The event is returned inline on the SDK response as response.proactive.

Event payload

json
{
  "event": "proactive.mood_drop",
  "timestamp": "2026-04-17T14:22:10Z",
  "data": {
    "trigger": "mood_drop",
    "description": "User mood dropped below critical threshold",
    "suggested_action": "Send empathetic check-in message",
    "end_user_id": "patient_42",
    "user_state": {
      "mood": 0.18,
      "energy": 0.42,
      "trust": 0.55,
      "interaction_count": 7,
      "last_seen": "2026-04-17T14:19:40Z"
    },
    "timestamp": "2026-04-17T14:22:10Z"
  }
}

Cooldowns (persisted)

Each (end_user, trigger) pair has an explicit cooldown window. The tableproactive_triggers keyed by these two columns storeslast_fired_at. Until the cooldown elapses, the trigger won't re-fire for that user — even across backend restarts or multiple worker processes.

Policy-driven triggers are first-class
Any policy with a fire_event action becomes a trigger. The cooldown is configured per-rule in the YAML. See Policy Engine .

Delivery channels

Any active webhook subscribed to the event type receives it. That includes:

  • Your custom HTTPS endpoint (via /api/webhooks)
  • Slack / Discord Incoming Webhooks (via /api/integrations)
  • The tenant's Signals page (live SSE stream)