IntegrationInitial Support

ServiceNow

Govern incident and ticket writes with deterministic identity and bounded retries.

RunwayCtrl wraps ServiceNow writes at the tool boundary. Every incident, update, assignment, or state change passes through policy enforcement and produces a traceable attempt record.

01 / Governed actions

What we govern

Initial support focuses on high-risk ServiceNow writes. Each action has a defined scope and prevents specific failure modes.

Create incident

ScopePer incident identity
PreventsDuplicate incident creation from retries or parallel agents

Add work note

ScopePer record / note body
PreventsRepeated notes caused by retry storms or overlapping agents

Add comment

ScopePer record / comment body
PreventsDuplicate public-facing updates on the same ticket

Assign record

ScopePer record / assignee
PreventsConflicting assignment changes across agents

Update state

ScopePer record / state transition
PreventsRacing status changes and invalid repeated transitions

Update fields

ScopePer record / field set
PreventsDuplicate or conflicting field mutations during retries
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 fuzzy intent matching.

sn.incident.create:{tenant}:{caller}:{short_description_hash}

Canonical hash of incident identity. Same create request = same key = dedupe.

sn.record.worknote:{table}:{sys_id}:{note_hash}

Identity tied to one note on one record. Prevents duplicate work notes.

sn.record.comment:{table}:{sys_id}:{comment_hash}

Canonical public comment identity on a specific record.

sn.record.assign:{table}:{sys_id}:{assignee}

Per-record assignment identity. Prevents duplicate assignment changes.

sn.record.state:{table}:{sys_id}:{state}

Per-record, per-state transition identity. Same target state = same key.

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 and ticket workflows

Budget3
BackoffExponential + jitter (250ms, 500ms, 1s)
StopOn 4xx silent errors, auth/permission errors
LeasePer record or per action

High-volume ops

Stricter limits for queue-heavy or bursty automations

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

Strict dedupe

Single-attempt mode for sensitive workflows

Budget1
BackoffNone
StopOn any error
LeasePer action
04 / Concurrency leases

Prevent dueling agents

Short-lived leases prevent multiple agents from racing the same ServiceNow record. Only one agent holds the lease at a time.

Per-record lease

One agent per record at a time. Prevents racing updates, assignments, or state changes.

Per-note lease

One agent per note identity. Prevents duplicate work notes or comments.

Per-action lease

Fine-grained control. One agent per specific action type per resource.

05 / Receipts + traces

What you get

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

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

{
  "schema_version": "0.1",
  "attempt_id": "att_01...",
  "action_key": "sn.incident.create:acme:user123:9c2b...",
  "integration": "servicenow",
  "target": {
    "table": "incident",
    "sys_id": null
  },
  "policy": {
    "retry_budget": 3,
    "backoff": [250, 500, 1000],
    "lease_scope": "per-action"
  },
  "outcome": "success",
  "timing": {
    "started_at": "2026-03-06T19:19:12Z",
    "finished_at": "2026-03-06T19:19:13Z"
  },
  "trace": {
    "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
    "span_id": "00f067aa0ba902b7"
  },
  "tool": {
    "name": "servicenow.createIncident",
    "endpoint": "POST /api/now/table/incident"
  },
  "result": {
    "sys_id": "7f3b2c...",
    "number": "INC0012451"
  },
  "redaction": true,
  "excerpt": null
}

Attempt record includes action identity, timing, policy, outcome, and tool metadata.

06 / Boundaries

What's not yet

Initial support is scoped to the highest-value write paths. These capabilities are not included in the current preview.

  • -Bulk import or mass-update jobs
  • -Complex workflow designer orchestration
  • -Arbitrary scripting inside ServiceNow
  • -Full CMDB graph mutation coverage
  • -Custom app lifecycle management
  • -Broad ServiceNow API coverage beyond initial governed actions
07 / Get started

Bring one incident workflow

We'll help define ActionKeys and policies for your first ServiceNow workflow. You get early builds, a shared Slack channel, and direct input on priorities.