Playbooks

Playbooks are automated response workflows that chain together Sentinel actions. Define them once and trigger them manually via API, or have Sentinel execute them automatically when specific conditions are met.

The playbook object

json
{
  "id": "pbk_01hxyz",
  "tenant_id": "ten_01hxyz",
  "name": "Ransomware containment",
  "description": "Isolate affected device, revoke user sessions, block known C2 IPs.",
  "trigger": "auto",
  "trigger_conditions": {
    "incident_type": "ransomware",
    "severity": ["critical", "high"]
  },
  "steps": [
    {
      "order": 1,
      "action": "isolate_device",
      "target": "incident.primary_device",
      "reason_template": "Ransomware containment playbook, incident {{incident.id}}"
    },
    {
      "order": 2,
      "action": "revoke_sessions",
      "target": "incident.primary_user",
      "reason_template": "Ransomware containment, revoking sessions for {{user.email}}"
    },
    {
      "order": 3,
      "action": "notify_analyst",
      "params": { "channel": "pagerduty", "priority": "P1" }
    }
  ],
  "enabled": true,
  "created_by": "usr_01hxyz",
  "created_at": "2025-03-01T09:00:00Z"
}

Trigger modes

NameTypeRequiredDescription
manualstringNoPlaybook only runs when explicitly triggered via the API or UI.
autostringNoSentinel runs the playbook automatically when trigger_conditions match.
semi-autostringNoSentinel alerts the analyst and queues the playbook, runs on analyst approval.

List playbooks

bash
GET /v1/sentinel/playbooks?filter[trigger]=auto

Create a playbook

bash
POST /v1/sentinel/playbooks
NameTypeRequiredDescription
namestringYesDescriptive name.
triggerstringYesmanual | auto | semi-auto
trigger_conditionsobjectNoConditions that trigger auto/semi-auto execution. Supports incident_type, severity, affected_asset_type.
stepsarrayYesOrdered list of response actions.
enabledbooleanNoDefaults to true.

Run a playbook manually

bash
POST /v1/sentinel/playbooks/:id/run

{
  "incident_id": "inc_01hxyz",
  "context": {
    "device_id": "dev_01hxyz",
    "user_id": "idn_01hxyz"
  }
}

Returns 202 Accepted with a playbook run object. Steps execute asynchronously, subscribe to the playbook.run.completed webhook event for completion notification.

Approve or reject a gated step

bash
POST /v1/sentinel/playbooks/runs/:run_id/steps/:step_index/approve

POST /v1/sentinel/playbooks/runs/:run_id/steps/:step_index/reject
{
  "reason": "Target is a protected break-glass account."
}

A rejection is a durable negative decision. It cancels the remaining run and the advancer compensates earlier reversible steps in reverse order.

Warning:Each step's order, target, and reason_template fields shown above are accepted and stored, but the current execution engine only reads each step's action field when a run actually executes — steps run in array order (so order is currently redundant with array position, not independently honored), and per-step target/templated reason_template resolution against the incident is not yet implemented. Use context (below) to supply entity IDs the WHOLE run needs (e.g. device_id, user_id) — today this is a run-level context object, not a per-step target lookup.

Built-in playbooks

  • Compromised Endpoint Lockdown (human-approval tier), isolate, lock local access, evict sessions, suspend the process, disable persistence, quarantine, collect evidence, and notify.
  • Credential Theft Containment (human-approval tier), isolate device, revoke sessions, force MFA, collect forensics.
  • Ransomware Early Lockdown (automatic tier), isolate device, kill process, disable account, collect forensics.
  • IOC Match Response (automatic tier), block IP, block domain, run scan.