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.
What we govern
Initial support focuses on high-risk ServiceNow writes. Each action has a defined scope and prevents specific failure modes.
Create incident
Add work note
Add comment
Assign record
Update state
Update fields
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.
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
High-volume ops
Stricter limits for queue-heavy or bursty automations
Strict dedupe
Single-attempt mode for sensitive workflows
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.
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.
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
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.