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.
What we govern
Initial support focuses on incident lifecycle writes. Each action has a defined scope and prevents specific failure modes.
Create incident
Update incident
Add note
Add responder
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.
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
Noisy outage mode
Stricter limits during high-volume incidents
Strict dedupe
Single-attempt for critical writes
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)
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
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.