IntegrationInitial Support

PagerDuty

Govern incident writes with stable action identity, bounded retries, and receipts.

RunwayCtrl wraps PagerDuty API calls at the tool boundary. Every incident write passes through policy enforcement and produces an attempt record.

01 / Governed actions

What we govern

Initial support focuses on incident lifecycle writes. Each action has a defined scope and prevents specific failure modes.

Create incident

ScopePer service / per dedupe_key
PreventsDuplicate incidents from retry storms or parallel agents

Update incident

ScopePer incident
PreventsConflicting status updates from racing agents

Add note

ScopePer incident
PreventsDuplicate notes under retries

Add responder

ScopePer incident
PreventsDuplicate responder assignments
02 / ActionKey conventions

Stable action identity

ActionKeys are developer-provided or derived from canonicalized action inputs. Same write = same key = deduplicable.

Canonicalization: normalize fields, stable hashing, deterministic ordering. No LLM-guessed intent.

pd.incident.create:{service_id}:{dedupe_key}

Stable identity for incident creation. Same service + dedupe_key = same write.

pd.incident.update:{incident_id}:{field_set_hash}

Identity tied to specific field changes. Different updates get different keys.

pd.incident.note:{incident_id}:{hash(note_canonical)}

Canonical hash of note content. Same note = same key = dedupe.

pd.incident.responder:{incident_id}:{user_id}

Per-user assignment identity. Prevents duplicate adds.

03 / Policy defaults

Opinionated presets

Start with a preset, customize as needed. Each preset defines retry budget, backoff curve, stop conditions, and lease scope.

Safe default

Balanced for most incident workflows

Budget3
BackoffExponential + jitter (250ms, 500ms, 1s)
StopOn 4xx client errors
LeasePer-incident

Noisy outage mode

Stricter limits during high-volume incidents

Budget2
BackoffStronger exponential (500ms, 2s)
StopOn 4xx or rate limit
LeasePer-service

Strict dedupe

Single-attempt for critical writes

Budget1
BackoffNone (single attempt)
StopOn any error
LeasePer-action
04 / Receipts + traces

What you get

Every governed action produces an attempt record. The ledger is the source of truth for governed actions.

Trace fields align to OpenTelemetry + W3C Trace Context when enabled.

{
  "schema_version": "0.1",
  "attempt_id": "att_01H...",
  "action_key": "pd.incident.create:P1234567:alert-cpu-high-web-01",
  "integration": "pagerduty",
  "actor": "agent:oncall-responder-v2",
  "policy": {
    "retry_budget": 3,
    "backoff_ms": [250, 500, 1000],
    "lease": "lease_pd_01H..."
  },
  "outcome": "success",
  "timestamps": {
    "started_at": "2026-01-25T20:19:12Z",
    "finished_at": "2026-01-25T20:19:12Z"
  },
  "trace": {
    "trace_id": "4bf92f3577b34da6a...",
    "span_id": "00f067aa0ba902b7"
  },
  "tool": {
    "name": "pagerduty.incidents.create",
    "endpoint": "POST /incidents"
  },
  "redaction": false,
  "error": null
}

Example shape for v0.1 (may evolve during builds)

05 / Boundaries

What's not yet

Initial support is scoped to incident lifecycle writes. These capabilities are not included in the current preview.

  • -Autopilot remediation (agent decides and executes without policy)
  • -Multi-step runbook orchestration (sequential workflow engine)
  • -Broad PagerDuty API coverage (initial support is incident-focused)
  • -Enterprise compliance packs
06 / Get started

Bring one incident workflow

We'll help define ActionKeys + policies for your specific PagerDuty writes. You get early builds, a shared Slack channel, and direct input on priorities.