Wednesday, August 12, 2026

Governance & Platform Impact: The AI Accountability Layer on ServiceNow (Chapter 6)

Governance & Platform Impact: The AI Accountability Layer on ServiceNow

This is Chapter 6, the final chapter in a series walking through ServiceNow's AI stack from the ground up. The first five chapters moved from platform fundamentals through Now Assist, agentic AI, and integration layers — each one adding capability. This chapter is different in kind: it's not about what's possible, it's about what you're accountable for once it's running.

Every capability chapter so far ended with "here's what to review before trusting the output." This chapter is what happens when that review discipline has to scale past one person checking one script — to an enterprise instance, multiple modules, and an audit trail someone else will eventually read.

1. Data Residency: Where Does It Actually Go?

"Where does the data go" isn't one answer for "AI on ServiceNow" — it depends on which feature, which model, and how it's configured. A useful habit is running every new AI feature through the same short decision tree before enabling it against real data.

Is the model hosted within your instance's own tenant boundary,
or a shared multi-tenant service?
  ├─ Own tenant → confirm data doesn't leave your compliance boundary
  └─ Shared service → ask: is the data used for further model training?
        ├─ Yes → this needs explicit compliance sign-off, not assumption
        └─ No, per vendor terms → confirm that contractually, not verbally

Does the feature send full record content, or only specific fields?
  ├─ Full record → higher exposure if the record has sensitive fields
  └─ Scoped fields → lower exposure, but confirm the scope is enforced,
        not just documented

Is there a regional/geographic processing constraint on this data?
  ├─ Yes (e.g. data residency law, contractual clause) → verify the
        processing region matches before enabling
  └─ No known constraint → still worth documenting that you checked

What to actually learn: run this tree per feature, not once for "AI" as a category. Now Assist's summarization skill and a custom Agent Studio agent calling an external model may have entirely different answers to the same three questions, even on the same instance.

2. License & Consumption Impact

AI features typically consume against separate entitlements from the base platform license, and consumption can scale in ways that aren't obvious until you've enabled a few modules at once.

Example — a sample cost-impact view across three modules:

Module AI Feature Enabled Consumption Driver
ITSM Incident summarization Per-summary generation, scales with ticket volume
CSM Case summarization + Virtual Agent Case volume plus conversational turn count
HRSD Case summarization Case volume, typically lower than CSM but seasonal spikes (open enrollment, etc.)

The point of a table like this isn't the exact numbers — those depend on your actual contract and usage — it's the shape: consumption drivers differ by module, and a module with a seasonal spike (HR case volume around open enrollment, for instance) can produce a consumption spike that looks alarming in isolation but is entirely predictable if someone mapped it in advance.

What to actually learn: build this kind of module-by-module consumption map before rollout, not after the first invoice surprises someone. It's also useful ammunition for exactly the ROI conversations that come up when justifying AI feature adoption to budget holders.

3. How AI-Generated Changes Show Up in the Audit Trail

This is worth checking directly rather than assuming, because it affects whether an AI-assisted change is actually distinguishable later from a manual one.

Example — a human-made change vs. an AI-drafted one, in the audit log:

Human-made change (sys_audit record):
  fieldname: close_notes
  oldvalue: (empty)
  newvalue: "Replaced faulty network cable, confirmed connectivity restored."
  user: jane.smith
  reason: (not typically captured)

AI-drafted, human-approved change (sys_audit record):
  fieldname: close_notes
  oldvalue: (empty)
  newvalue: "Replaced faulty network cable, confirmed connectivity restored."
  user: jane.smith
  reason: (not typically captured — the record looks identical to the
           human-made one above)

That similarity is the actual finding worth sitting with: unless your instance is specifically configured to tag AI-assisted edits — for instance, logging that a field's content originated from a generative action before a human edited and submitted it — the standard audit trail doesn't distinguish "an agent drafted this and a human approved it" from "a human wrote this from scratch." For most day-to-day work that's fine. For anything falling under a compliance framework that cares about decision provenance, it's a gap worth closing deliberately, not discovering during an audit.

What to actually learn: if AI-assisted decision provenance matters for your compliance posture, verify explicitly whether your instance captures that distinction, and if it doesn't, treat that as a configuration gap to raise — don't assume the audit trail is telling a more complete story than it is.

4. Infrastructure Dependencies Underneath It All

AI workloads don't run in a vacuum — they add query and processing load to the same platform infrastructure everything else depends on, and that infrastructure is itself changing underneath ServiceNow with RaptorDB's rollout as the HTAP replacement for MariaDB/MySQL.

A real example of why this isn't a footnote: a prior IRE (Identification & Reconciliation Engine) schema mismatch incident occurred when VR USEM, Rapid7 AppSec, and Discovery/Service Mapping were upgraded simultaneously — the resulting log volume ran to roughly 6 million entries per hour. That's not an AI-specific incident, but it's exactly the kind of platform-level fragility that matters more, not less, once AI features are layered on top and depending on the same CMDB reconciliation pipeline for grounding data. An agent summarizing "related CIs" during a period like that isn't just slow — it may be working against data mid-reconciliation.

What to actually learn: treat plugin upgrade governance and infrastructure changes like RaptorDB as directly relevant to AI feature reliability, not a separate platform-ops concern. Before rolling out or expanding an AI feature that depends on CMDB or reconciliation data, ask whether there are any upgrades scheduled that touch the same pipeline — the two workstreams should be coordinated, not siloed.

Series Wrap-Up

Six chapters, one thread running through all of them: every layer of ServiceNow's AI stack is only as trustworthy as your ability to review what it hands you, and that review discipline has to scale as the stakes go up — from a single generated script in Chapter 3, to an agent composing its own tool-call sequence in Chapter 4, to a governance posture that holds across an entire instance in this chapter.

If there's one habit worth carrying forward past this series, it's the question this chapter kept returning to: where does this data actually go, and who's accountable for what it did? Ask that before enabling a feature, not after.


This series:

  • Chapter 1 — Platform Fundamentals for AI-Ready ServiceNow
  • Chapter 2 — Now Assist as a Consumer
  • Chapter 3 — Now Assist for Creator
  • Chapter 4 — Agentic AI: Otto, Agent Studio, Build Agent
  • Chapter 5 — Action Fabric & MCP
  • Chapter 6 — Governance & Platform Impact (this chapter)

Tuesday, August 11, 2026

Action Fabric & MCP on ServiceNow: Integration Layer for AI Agents (Chapter 5)

Action Fabric & MCP on ServiceNow: Integration Layer for AI Agents

This is Chapter 5 in a series walking through ServiceNow's AI stack from the ground up. Chapter 4 covered agents — goal-driven systems that decide their own sequence of tool calls. This chapter covers the layer underneath that: how those tools actually get exposed and called in the first place. That's Action Fabric and MCP (Model Context Protocol), and it's the layer where an agent stops being a conceptual diagram and starts being something with real, executable access to your instance.

This chapter ends with a real hands-on finding from testing a community MCP server against a PDI — not a hypothetical risk, but something that actually happened during testing.

1. MCP vs. REST — the Same Integration, Built Two Ways

The clearest way to understand MCP is to see the same integration task built the traditional way and the MCP way, side by side.

Task: let an external AI tool look up and update incident records.

Built as a traditional REST integration:

GET  /api/now/table/incident?sysparm_query=number=INC0010001
PATCH /api/now/table/incident/{sys_id}
      Body: { "state": "6", "close_notes": "Resolved via automation" }

Here, the external system needs to know the table API shape, the correct sys_id lookup pattern, and the exact field names and value mappings (state 6 = Resolved) in advance. Every capability it has is whatever the integrating developer explicitly wired up and documented. An AI model consuming this would need those specifics fed into its context as documentation or examples every time.

Built as an MCP server:

Tool: get_incident(number: string) → returns incident record
Tool: resolve_incident(number: string, notes: string) → sets state to
      Resolved and applies notes

Description exposed to the model: "resolve_incident: Marks the given
incident as Resolved with the provided close notes. Use this only after
confirming the underlying issue is fixed."

The MCP server does the translation work — the model never sees a raw table API or a state code. It sees a named, described action and calls it with plain arguments. This is the actual value proposition: MCP standardizes how a model discovers and invokes capabilities, so the same model can work against ServiceNow, a ticketing tool, and a monitoring platform through the same protocol shape, rather than needing bespoke integration knowledge baked into its prompt for each one.

What to actually learn: MCP isn't a replacement for REST underneath — most MCP servers call REST APIs internally, this one included. What MCP replaces is the need to hand-document and hand-feed API specifics into a model's context every time. The tradeoff, covered next, is that the server now decides on the model's behalf what's "safe" to expose as a callable action — and that decision can be wrong.

2. How Action Fabric Exposes Capabilities

Action Fabric is ServiceNow's own layer for defining what capabilities are callable by agents and external tools — conceptually similar to the MCP tool definitions above, but native to the platform and integrated with its role and ACL model rather than sitting outside it.

Example — one action defined and called:

  • Define the action's inputs and outputs explicitly — for a "resolve incident" action, that's an incident number in, a success/failure status and updated record out. No open-ended access to arbitrary tables.
  • Attach the action to a scoped role, the same discipline from Chapter 1 and Chapter 4 — the account executing this action should have exactly enough access to resolve incidents, not general write access to the incident table.
  • Write the action's description for the consuming agent, not for a developer reading the code — this is the same lesson from Chapter 4's tool-scoping discussion, because Action Fabric actions and Agent Studio tools are ultimately the same kind of artifact wearing different names.
  • Test the action being called with an invalid or already-resolved incident number before trusting it inside an agent's tool set — the failure behavior here becomes the agent's problem to reason about once it's live.

What to actually learn: Action Fabric and MCP are solving the same underlying problem — giving a model a well-defined, well-scoped action instead of raw API access — from two different directions. Action Fabric is ServiceNow-native and governed by the platform's own role model; MCP is protocol-level and platform-agnostic, meant to work the same way regardless of what system sits behind it.

3. Hands-On Caution: a Real Finding From Testing an MCP Server Against a PDI

Everything above is the theory. Here's what actually happened testing a community MCP server — nowaikit — connecting Claude Code to a ServiceNow PDI inside GitHub Codespaces.

Finding 1 — write operations executed without confirmation prompts. Section 2 above described a well-designed action model as one where the exposed action's description and scope are deliberate, tested guardrails. In this hands-on test, that guardrail was missing at the point that matters most: when the connected AI tool issued a write operation against the PDI, it went through directly, with no confirmation step in between the model's decision and the actual change landing on the instance. This is precisely the failure mode Chapter 4 warned about in the abstract — an agent composing its own action sequence is only as safe as the friction (or lack of it) between "the model decided to do this" and "this actually happened." A missing confirmation step removes that friction entirely.

Finding 2 — a hidden local dependency. nowaikit's slash-commands required a local Ollama instance running separately from Claude Code itself. This is a practical, easy-to-miss setup gap: the MCP server's advertised capabilities weren't fully available through Claude Code alone, and the dependency wasn't obvious until testing the slash-commands specifically. Worth calling out because it's exactly the kind of gap that "reading the documentation" doesn't always surface — it surfaces from actually running the thing.

What to actually learn: before connecting any community MCP server to an instance that matters — even a PDI — test write operations specifically and deliberately, with data you can afford to lose, and confirm whether a confirmation/approval step exists before the server can execute a change. Don't assume it does just because a well-designed system in principle would have one. And separately, budget testing time for a server's full advertised feature set, including anything gated behind local tooling that isn't part of the core install.

Checkpoint Before Moving to Chapter 6

You should be able to: explain what MCP standardizes versus what it doesn't, using the get_incident/resolve_incident example rather than protocol jargon; define an Action Fabric action with a properly scoped role and a description written for the consuming agent, not a developer; and — most importantly — know to test any new MCP server's write behavior explicitly before trusting it near real data, because "it should have a confirmation step" is a design assumption, not a verified fact. Chapter 6 takes this same skepticism and applies it at the governance level — data residency, licensing, audit trails, and the infrastructure underneath all of it.

Next in this series: Chapter 6 — Governance & Platform Impact, including a data-residency decision tree and how AI-generated changes actually show up in the audit log.

Sunday, August 09, 2026

Agentic AI on ServiceNow: Otto, Agent Studio, and Build Agent Explained (Chapter 4)

Agentic AI on ServiceNow: Otto, Agent Studio, and Build Agent Explained

This is Chapter 4 in a series walking through ServiceNow's AI stack from the ground up. Chapters 1 through 3 covered fundamentals, Now Assist as a consumer, and Now Assist for Creator — all of it still fundamentally human-directed, one generation at a time. This chapter is where that changes. Agentic AI means something is making tool-calling decisions on its own, repeatedly, across a task — not producing one draft for you to review once.

This is also the chapter where beginners most often confuse marketing language for architecture. The goal here is to make the distinction concrete rather than conceptual.

1. Agent vs. Chatbot vs. Flow — the Same Task, Three Ways

The clearest way to see the difference is to build the same task three different ways and compare what's actually deciding what happens next.

Task: a user requests a password reset.

Built as a flow (Chapter 1–2 territory):

Trigger: Catalog Item Submitted (Password Reset)
Action 1: Verify identity (MFA challenge)
Action 2: If verified → Reset password, notify user
Action 3: If not verified → Create incident, assign to Security

Every branch here was written by a human in advance. The flow has exactly two paths, and both were anticipated at design time.

Built as a Virtual Agent chatbot (Chapter 2 territory):

Topic: Password Reset
NLU intent match → "I forgot my password" / "reset my password" / etc.
Conversational script: ask for MFA, call the same underlying flow above,
confirm completion in chat, or escalate if MFA fails.

This adds a natural-language front end on top of the same predetermined branches. The chatbot decides which topic matches what the user typed — it doesn't decide what actions to take once the topic is matched. That's still fixed by the script underneath.

Built as an agent (this chapter's territory):

Goal: "Help the user regain access to their account securely."
Tools available: verify_identity(), reset_password(), check_recent_incidents(),
create_security_case(), lookup_account_lock_reason()

The agent decides, per conversation, which tools to call and in what order.
Example run: user says password won't reset even after a reset was issued →
agent calls lookup_account_lock_reason() on its own initiative (a tool the
flow version never even considered), discovers the account is locked from
repeated failed attempts, and calls create_security_case() instead of
retrying reset_password() a second time.

This is the actual distinction: the agent wasn't told "if reset fails, check for account lock." It was given a goal and a set of tools, and it composed its own sequence based on what the situation in front of it actually was. That's what "agentic" means in practice — not smarter conversation, but a genuinely different locus of control over what happens next.

What to actually learn: before calling anything an "agent," ask who or what decided the sequence of actions — a person at design time, or the system at run time. If it's the former, it's a flow or a scripted chatbot no matter how conversational the front end looks.

2. Agent Studio Basics

Agent Studio is where you define an agent's goal, personality, and — most importantly — exactly which tools it's allowed to call. That tool boundary is the real security and reliability control here, more than any prompt wording.

Example — defining one tool, step by step:

  • Start with the narrowest possible version of the tool. For check_recent_incidents(), that means it takes a user sys_id and a lookback window, and returns only incidents that user opened — not a general-purpose incident search.
  • Write the tool description the way you'd brief a new hire, not the way you'd write a function docstring — the agent uses this description to decide when to call the tool, so vague wording produces inconsistent invocation. "Checks if this user has any open incidents from the last 7 days related to account access" is far more useful to the agent than "Queries the incident table."
  • Scope the underlying role to exactly what the tool needs — this is Chapter 1's ACL discipline again, now applied to a tool rather than a human user. If the tool only needs read access to incidents matching caller_id = current user, don't grant it broader incident read access "just in case."
  • Test the tool in isolation before adding it to the agent — call it directly with a few realistic and edge-case inputs (a user with no incidents, a user sys_id that doesn't exist) and confirm the output is something the agent can reasonably act on, not a stack trace.

What to actually learn: an agent is only as safe and predictable as the tools it's given. Spend more design time on tool scoping and description quality than on the agent's overall goal wording — the goal sets intent, but the tools set what's actually possible.

3. Build Agent: a Spec-to-Code Walkthrough

Build Agent is aimed specifically at developer-assist scenarios — taking a specification and producing working code or configuration, with more autonomy than Now Assist for Creator's single-shot generation.

Example — a simple utility, spec to output:

Spec: "Build a Script Include that takes a table name and a sys_id, and returns whether the record exists and its current state field value, handling the case where the table name is invalid."

Unlike a single Text-to-Code prompt, Build Agent's process typically involves it checking its own output against the spec — noticing, for instance, that "handling the case where the table name is invalid" requires wrapping the GlideRecord initialization in a check against GlideTableHierarchy or a similar existence check, rather than letting an invalid table name throw an unhandled error deep in the query.

Where the review discipline still matters: the fact that Build Agent iterates on its own doesn't mean the iteration converges on what you actually meant. If the spec was ambiguous about what "exists" means for a soft-deleted record, the agent will pick an interpretation and run with it consistently — consistency isn't the same as correctness. The review checklist from Chapter 3 still applies here; it just gets applied to a larger, more autonomous unit of output.

What to actually learn: more autonomy in the generation process raises the bar on spec precision, not the bar you need to hold for review. Write specs the way you'd write acceptance criteria for a human developer — explicit about edge cases — because an autonomous build process will fill ambiguity gaps with its own assumption, silently.

4. Where Otto Fits

Otto is ServiceNow's broader agentic positioning, and it's the piece most actively evolving — worth tracking rather than treating as settled.

Where it sits, at a glance:

Now Assist ─────────── generation for a human to review, one shot at a time
Agent Studio ───────── individual goal-driven agents with defined tools
Build Agent ────────── an agent specialized for developer/spec-to-code work
Otto ───────────────── the broader orchestration/positioning layer these
                        agentic capabilities sit under

What to actually learn: don't over-invest in memorizing today's exact positioning of Otto relative to Agent Studio — this layer is genuinely still moving. What's worth internalizing instead is the underlying pattern: individual agents with scoped tools, an orchestration layer above them, and a governance layer that has to hold regardless of what any individual product is named this quarter.

Checkpoint Before Moving to Chapter 5

You should be able to: look at a "conversational AI" feature and correctly identify whether it's actually agentic or just a scripted chatbot with a natural-language front end; scope a tool for Agent Studio the way you'd scope an ACL; write a Build Agent spec precise enough that it doesn't leave edge-case interpretation up to the model; and place Otto, Agent Studio, and Build Agent relative to each other without needing the exact current marketing diagram in front of you. Chapter 5 goes one layer deeper — into how these agents actually reach outside ServiceNow to call external tools and models, which is where the tool-scoping discipline from this chapter gets tested against real integration risk.

Next in this series: Chapter 5 — Action Fabric & MCP, including a side-by-side of the same integration built as REST vs. MCP, and a real cautionary case study from hands-on testing.

Now Assist for Creator: Text-to-Flow, Text-to-Code, and Reviewing AI Output (Chapter 3)

Now Assist for Creator: Text-to-Flow, Text-to-Code, and Reviewing AI Output

This is Chapter 3 in a series walking through ServiceNow's AI stack from the ground up. Chapter 1 covered platform fundamentals, Chapter 2 covered Now Assist as something you use. This chapter is where the relationship changes — Now Assist for Creator is where you start building with AI, which means you're now responsible for reviewing its output rather than just reading it.

Treat everything in this chapter as a first draft from a capable but unsupervised junior developer — fast, often close, and never something you deploy without reading it yourself.

1. Text-to-Flow

Text-to-Flow takes a natural language description and generates a starting flow structure — trigger, actions, and branching logic. It's genuinely useful for scaffolding, but "generates a flow" and "generates the correct flow" are different claims.

Example — a real prompt and what it produced:

Prompt: "When a high priority incident is created, notify the assignment group manager and create a task for the on-call engineer."

Generated flow (typical shape):

Trigger: Record Created (incident)
Condition: priority = 1
Action 1: Look Up Record (assignment_group.manager)
Action 2: Send Notification (to: manager)
Action 3: Create Task (short_description: "On-call review needed")

What needed fixing before this was safe to deploy:

  • The condition checked priority = 1 only on creation — it missed the case where an incident is created at priority 3 and later escalated to priority 1. The trigger needed an additional "Record Updated" path with a priority-changed condition, which the prompt implied ("when a high priority incident is created") but which a literal reading of the flow didn't actually cover for escalations.
  • The generated task had no assignment to the actual on-call engineer — it created an unassigned task with a generic description. There was no on-call schedule lookup at all; the phrase "on-call engineer" in the prompt didn't map to any actual on-call rotation table the flow queried. This is a common gap: the AI produces something structurally plausible for a concept it has no real data source for.
  • No error handling if assignment_group.manager was empty — which happens more often than you'd expect on groups that haven't been fully configured. The notification action would silently fail rather than falling back to a default recipient.

What to actually learn: Text-to-Flow is strongest at getting the trigger and the obvious happy path right, and weakest at edge cases, real data source lookups, and anything the prompt implied without stating literally. Always trace the flow against the actual scenario it needs to handle, not just the scenario it was asked to handle.

2. Text-to-Code

Text-to-Code generates script includes, business rules, and similar server-side scripts from a prompt. This is where Chapter 1's scripting fluency stops being optional and starts being the thing standing between you and shipping a quiet bug.

Example — a generated script include, reviewed line by line:

Prompt: "Write a script include that returns the number of open incidents for a given assignment group."

var OpenIncidentCounter = Class.create();
OpenIncidentCounter.prototype = {
    initialize: function() {},

    getOpenCount: function(groupSysId) {
        var gr = new GlideRecord('incident');
        gr.addQuery('assignment_group', groupSysId);
        gr.addQuery('state', '!=', 7);
        gr.query();
        return gr.getRowCount();
    },

    type: 'OpenIncidentCounter'
};

What a beginner should catch on review:

  • This is close to correct, but gr.getRowCount() after .query() without ever calling .next() is a known-inefficient pattern — it works, but it runs an extra aggregate-style query under the hood on some versions. The more reliable and performant approach is a GlideAggregate with a count, not a plain GlideRecord.
  • No null/empty check on groupSysId — passing an empty string would run an unfiltered assignment_group query and silently return a misleading count rather than erroring.
  • No scope declaration or API annotation — fine for a quick PDI test, not fine for something headed into a scoped application, which this consultant's own Integration Registry work would require.

What to actually learn: generated scripts tend to be functionally correct on the happy path and weak on performance patterns and defensive coding. Neither failure mode throws an error during testing — both show up later, either as a slow query at scale or a wrong number nobody questioned.

3. Generative Actions in Flow Designer

Beyond generating a whole flow, you can drop a generative action into an existing hand-built flow — this is often the more practical pattern, since it lets you keep tight control over the structure and only delegate the specific step that benefits from generation.

Example — a small end-to-end build:

Take the approval flow from Chapter 1 — hardware request, manager approval, task creation. Instead of generating the whole thing, build the trigger and approval steps by hand as usual, then insert a single generative action right before the approval step: "Summarize the business justification field in one sentence for the approver." This keeps the flow's logic entirely under your control and confines the AI's role to exactly one bounded, low-risk task — text summarization — rather than trusting it with branching decisions.

What to actually learn: the safest adoption pattern for a beginner isn't "generate the whole flow" — it's "build the skeleton yourself, insert generation only where the task is genuinely well-suited to it (summarization, drafting, classification), and keep every branching decision under explicit human-written logic."

4. A Human Review Checklist

Pulling the mistakes from the examples above into something reusable — this is the actual checklist worth running against anything Now Assist for Creator hands you before it goes anywhere near production:

  • Does the logic cover the scenario implied by the prompt, or only the scenario literally described? (The escalation-after-creation gap from the Text-to-Flow example.)
  • Does every field or lookup the generated logic references actually have a reliable data source, or is it assuming a table/field exists that isn't populated in practice? (The on-call engineer gap.)
  • What happens on empty or null input? Generated code and flows are consistently weaker here than on the happy path.
  • Is there a more efficient or idiomatic pattern than what was generated? (GlideAggregate vs. GlideRecord.getRowCount().)
  • Is the AI's role in this build bounded to a task it's actually suited for — summarization, drafting, classification — or has it been handed a branching decision it shouldn't own?

Checkpoint Before Moving to Chapter 4

You should be able to: take a Text-to-Flow output and identify at least one gap between the prompt's intent and the literal logic generated; review a generated script for both a correctness issue and a performance pattern issue; and explain why inserting a bounded generative action into a hand-built flow is usually safer than generating the whole flow. That review discipline is exactly what you'll need in Chapter 4, where the stakes go up — agents don't just draft a script for you to review once, they make tool-calling decisions on their own, repeatedly, without a human necessarily in the loop for each one.

Next in this series: Chapter 4 — Agentic AI: Otto, Agent Studio, and Build Agent, with the same task built three ways (flow, chatbot, agent) so the difference is concrete rather than conceptual.

Saturday, August 08, 2026

Now Assist as a Consumer: Skill Kits, Summarization, and Virtual Agent (Chapter 2)

Now Assist as a Consumer: Skill Kits, Summarization, and Virtual Agent

This is Chapter 2 in a series walking through ServiceNow's AI stack from the ground up. Chapter 1 covered the platform fundamentals — CMDB, Flow Designer, ACLs, and enough scripting to read what's happening under the hood. With that base in place, this chapter looks at Now Assist the way most people will first encounter it: as a consumer, not a builder.

Before building anything with AI on this platform, it's worth spending real time just using it — watching what it gets right, what it gets wrong, and where a human still needs to step in.

1. Skill Kits and Per-Module Licensing

Now Assist isn't one switch you flip once. It's packaged into Skill Kits — bundles of specific AI capabilities scoped to a module — and each one is licensed and enabled separately. Now Assist for ITSM and Now Assist for CSM are different entitlements, even though some of the underlying capability (like summarization) looks similar on the surface.

Example — enabling Now Assist for ITSM on a PDI:

  • Confirm the Now Assist for ITSM plugin is installed under System Applications > All Available Applications — on most current PDIs it ships pre-installed, but it's worth verifying rather than assuming.
  • Navigate to Now Assist Admin Console and confirm the ITSM Skill Kit shows as active. If it doesn't, this is where licensing gaps show up first — a missing entitlement will block activation even if the plugin itself installed cleanly.
  • Enable the specific skills you want inside that kit individually — incident summarization and resolution notes generation are typically separate toggles, not one bundled "on" switch.
  • Assign the sn_generative_ai.rai_admin or equivalent role to the users who need to configure it — this is separate from the roles that will actually consume the feature day to day.

What to actually learn: that "Now Assist is enabled" is not a single fact about an instance — it's a per-module, per-skill state, and the first debugging step for "why can't I see the summarize button" is almost always checking whether that specific skill inside that specific kit is actually turned on for that specific table.

2. Case & Incident Summarization

This is usually the first feature people see, and the easiest to evaluate honestly, because you can compare the AI output directly against the raw thread it summarized.

Example — before and after:

Before (raw work notes thread, condensed):

[Mon 9:14am] User reports VPN disconnects every ~10 min since this morning.
[Mon 9:40am] Checked client version, up to date. Asked user to restart adapter.
[Mon 10:02am] User confirms restart didn't help. Escalated to network team.
[Mon 1:15pm] Network team found packet loss on user's ISP-side link, not VPN config.
[Mon 1:20pm] User advised to contact ISP. Ticket on hold pending user confirmation.
[Tue 8:30am] User confirms ISP replaced modem, issue resolved.

After (Now Assist summary, typical output shape):

User experienced repeated VPN disconnections traced to ISP-side packet loss rather than a VPN configuration issue. Resolved after the user's ISP replaced their modem.

That's a genuinely useful compression — six work notes and roughly a day of elapsed time reduced to two sentences that get a new reader oriented fast. But notice what it silently drops: the specific troubleshooting steps already tried (adapter restart, client version check). If a similar ticket comes in later, an agent relying only on the summary might repeat a step that's already been ruled out. That's the actual skill to build here — knowing when the summary is sufficient and when you need to open the full thread.

What to actually learn: read several real summaries against their source threads before trusting the feature in production. Look specifically for what gets dropped, not just whether the summary sounds fluent — fluency and completeness are different things, and generated summaries are reliably better at the former.

3. Virtual Agent

Virtual Agent is the conversational front door, and the part worth studying closely as a beginner is exactly where it recognizes its own limits and hands off to a human.

Example — a sample conversation showing the handoff point:

User: my laptop won't connect to wifi
Bot:  I can help with that. Are you seeing an error message, or does
      it just not find any networks?
User: it finds the network but says wrong password even though
      im sure its right
Bot:  That sounds like it could be a saved credential issue rather
      than the actual password. Want me to walk you through
      forgetting and re-adding the network?
User: i tried that already, still doesnt work
Bot:  Since the basic steps haven't resolved it, I'll connect you
      with a support agent who can look at this further. Creating
      an incident now — you'll be routed to the Network team.

The useful thing to notice: the bot didn't try a third, more exotic troubleshooting step once the user said the standard fix failed. It recognized that as the signal to stop guessing and escalate. A poorly configured Virtual Agent topic keeps offering variations of the same fix past the point of diminishing returns, which frustrates users more than an early handoff would have.

What to actually learn: when reviewing or building a Virtual Agent topic, explicitly design the escalation condition rather than letting it be an afterthought. A topic with no clear "give up gracefully" branch is a common beginner mistake, and it's usually invisible until a real user gets stuck in a loop.

4. Where It Augments vs. Replaces

It's worth being precise about this, because it's the single most common misconception beginners bring in: Now Assist does not replace the case lifecycle. It inserts itself at specific points inside it.

Example — where Now Assist sits inside a standard incident lifecycle:

New → [AI: suggested category/priority] → In Progress → [AI: summarize thread on assignment handoff] → Resolved → [AI: draft resolution notes] → Closed

Every bracketed step is still a human decision point — the agent reviews the suggested category, the receiving team reads the summary rather than blindly trusting it, and the closing agent edits the drafted notes before submitting. None of the state transitions themselves are automated by Now Assist; the underlying ITSM process is untouched. What changes is the effort required at each of those points, not who's accountable for them.

What to actually learn: map out your own team's actual lifecycle and mark where an AI suggestion could reasonably sit, versus where it's being asked to make a decision it shouldn't own. That distinction is the difference between augmentation and quietly eroding accountability.

Checkpoint Before Moving to Chapter 3

You should be able to: enable a Skill Kit for a module and explain the licensing layer underneath it; read a Now Assist summary against its source thread and articulate what got dropped; identify whether a Virtual Agent topic has a real escalation path or just loops; and point to the exact steps in your team's lifecycle where an AI suggestion sits versus where a human decision is still required. That fluency is what makes Chapter 3 — where you start building with Now Assist for Creator — something you can review critically instead of accepting on faith.

Next in this series: Chapter 3 — Now Assist for Creator, with a real Text-to-Flow prompt, the flow it generated, and what needed fixing before it was safe to deploy.

Wednesday, August 05, 2026

Platform Fundamentals for AI-Ready ServiceNow (Chapter 1: Learning ServiceNow AI)

Chapter 1: Platform Fundamentals for AI-Ready ServiceNow

This is the first in a chapter-by-chapter series walking through ServiceNow's AI stack, from the ground up. Before touching Now Assist, Agent Studio, or MCP, it's worth being honest about something: every AI feature on this platform is only as good as the data and workflow foundation underneath it. This chapter covers that foundation, with real examples of what goes wrong when it's skipped.

1. Data Model & CMDB Basics

AI features don't reason over a clean abstraction — they reason over whatever records and relationships actually exist in your instance. Bad CMDB data doesn't just cause reporting headaches anymore; it now feeds directly into what an AI agent tells a user.

Example — a mismodeled relationship producing a wrong AI summary:

Say an incident is raised against a business application, "Expense Portal," which is supposed to run on a specific application server CI. If that cmdb_rel_ci relationship was never created — or was created against the wrong server after a migration — then when Now Assist generates a summary of "related incidents affecting this service," it will either miss genuinely related incidents or pull in unrelated ones tied to the wrong server. The AI isn't wrong; the data it was handed was.

What to actually learn:

  • The difference between a cmdb_ci record and a cmdb_rel_ci relationship record — they are separate tables, and a CI with no relationships is functionally invisible to anything doing impact analysis.
  • How to trace a CI's relationships visually using the dependency view, before assuming a relationship exists just because two records reference the same service.
  • Why reconciliation identification rules matter — a duplicate CI created by a second discovery source silently splits your relationship data across two records instead of one.

2. Flow Designer Essentials

Most Now Assist and agentic features eventually call into, or get called from, a flow. You don't need to be a flow expert before touching AI features, but you do need to be able to read one and know where an AI-driven action would plug in.

Example — a simple approval flow, annotated:

Take a basic hardware request approval flow: Trigger (record created on sc_request) → Ask for Approval (manager) → If Approved: Create Task → If Rejected: Notify Requester. This is the kind of flow a beginner should be able to open in Flow Designer and narrate out loud, step by step, before ever adding an AI action to it. Once you can do that, an AI-driven insertion point becomes obvious — for instance, a generative action summarizing the request's justification text for the approver, inserted right before the "Ask for Approval" step, so the approver sees a two-line summary instead of a wall of free text.

What to actually learn:

  • Triggers, actions, and subflows — and the difference between a flow and a subflow reusable across multiple parents.
  • Reading flow logs to see exactly which branch executed and why, since this is the same skill you'll need later to debug an agent's tool-calling decisions.
  • Where flow variables come from and how they're passed between steps — generative actions consume and produce these the same way any other action does.

3. ACLs and Roles

An AI agent doesn't get its own separate permission universe — it typically runs as a service account or inherits context from the user it's acting on behalf of. If that account's role is too broad, the agent can read or touch data nobody intended it to.

Example — an over-permissioned agent account:

Imagine a case-summarization agent given the itil role for convenience during setup, instead of a scoped role limited to the specific table and fields it needs. Because itil grants broad read access across incident, problem, and change tables, the agent's summaries can end up referencing details from records the requesting user was never meant to see — a classic over-scoping problem that predates AI, but that AI makes more visible because the output is now surfaced directly to an end user in prose.

The fix: create a dedicated role scoped to exactly the tables and fields the agent needs, apply it via an ACL rather than relying on a broad out-of-box role, and test by impersonating the agent's account directly rather than assuming the scope is correct.

What to actually learn:

  • How ACLs evaluate — table-level, field-level, and the role requirements attached to each.
  • The "Elevate Roles" and impersonation tools for actually testing what a given role can see, rather than assuming from the role name.
  • Why least-privilege matters more, not less, once an account's output becomes user-facing prose instead of a raw list a developer would sanity-check.

4. Basic Scripting: GlideRecord & GlideAjax

This isn't about becoming a scripting expert before touching AI features — it's about being able to read what a generated script is actually doing, since Now Assist for Creator and Build Agent will hand you code, and you need to be able to sanity-check it rather than deploy on faith.

Example — a script a beginner should be able to read line by line:

var gr = new GlideRecord('incident');
gr.addQuery('priority', 1);
gr.addQuery('state', '!=', 7); // exclude closed
gr.query();
while (gr.next()) {
    gs.info('High priority incident open: ' + gr.number);
}

A beginner should be able to say, out loud, exactly what this does: it opens a query against the incident table, filters to priority 1 records that aren't closed, runs the query, and logs each matching incident's number. That's the bar — not writing this from scratch, but reading it and catching if an AI-generated version of this query forgot the state filter and would have logged every priority-1 incident ever created, closed or not.

What to actually learn:

  • GlideRecord query patterns — addQuery, addEncodedQuery, and why the order of chained queries matters.
  • GlideAjax basics — the client-to-server call pattern, since generative actions and agent tools follow a similar request/response shape.
  • Where to spot common AI-generated mistakes: missing null checks, unscoped queries that should have been scoped, and queries that will run but return the wrong data quietly rather than erroring loudly.

Checkpoint Before Moving to Chapter 2

You should be able to: trace a CI's relationships and explain what breaks if one is missing; open a flow in Flow Designer and narrate its logic step by step; impersonate a role to verify what it can actually see; and read a short GlideRecord script and say exactly what it does and doesn't filter for. None of this requires expert-level depth — it requires enough fluency that when Now Assist hands you a generated flow or script in the next chapter, you're reviewing it, not trusting it blindly.

Next in this series: Chapter 2 — Now Assist as a Consumer, with a walkthrough of enabling it for ITSM and a real before/after of an incident summary.

Sunday, August 02, 2026

ServiceNow + AI: A Beginner's Learning Path (From Now Assist to Agent Studio and MCP)

ServiceNow + AI

Every few weeks someone asks a version of the same question: "I know ITSM, I know the platform — where do I even start with the AI stuff?" Fair question. ServiceNow's AI surface area has grown fast — Now Assist, Now Assist for Creator, Agent Studio, Otto, Build Agent, Action Fabric, MCP — and none of it comes with a map.

This guide lays out the sequence worth following, staged so each layer builds on the one before it — including where beginners typically go wrong by skipping straight to the parts that are trending.

1. Platform Fundamentals: Build the Base First

Skip this at your own risk. Every AI feature described below depends on it, and grounding quality for AI features is only ever as good as the underlying platform data.

What to Learn

  • Data model & CMDB basics — tables, records, relationships.
  • Flow Designer / Workflow basics — most Now Assist and agentic features hook into flows somewhere.
  • ACLs and roles — AI agents inherit the platform's permission model, so understand it before an agent starts acting on your behalf.
  • Basic scripting (GlideRecord, GlideAjax) — not mastery, just enough to read what a script include or business rule is actually doing.

Checkpoint: you should be able to navigate Studio, read a flow end-to-end, and explain what a table relationship means without looking it up. Roughly 2–3 weeks for someone new to the platform.

2. Now Assist as a Consumer: Learn What It Feels Like First

Now Assist is ServiceNow's packaged Gen AI layer — the "use it" layer, before the "build it" layer.

What to Learn

  • What Skill Kits are, and how Now Assist is licensed and enabled per module (ITSM, CSM, HR, and so on).
  • Core features: case/incident summarization, resolution notes generation, Virtual Agent conversational AI.
  • Where it sits in existing workflows — it augments the case lifecycle, it doesn't replace it.
  • If you have PDI access, try it hands-on — summarize a test incident and see what the output actually looks like.

Checkpoint: you can describe, in plain language, what a business user experiences when Now Assist is turned on for their module. Roughly 1–2 weeks.

3. Now Assist for Creator: Start Building With AI, Not Just Using It

This is the low-code building layer — where developers start using AI to build, not just consuming AI-generated output.

What to Learn

  • Text-to-Flow — generating flow logic from a natural language description.
  • Text-to-Code — generating script includes or business rules from a prompt.
  • Generative actions inside Flow Designer.
  • Where generated output still needs human review — treat it like a junior developer's first draft, not a finished artifact.

Checkpoint: build one small flow or script using a Creator AI feature, then review and correct its output yourself before deploying anywhere real. Roughly 2–3 weeks.

4. Agentic AI: Otto, Agent Studio, and Build Agent

This is the newer, architecturally different layer, and it's where most beginner confusion actually happens — slow down here rather than rushing through it.

What to Learn

  • What "AI Agent" actually means in ServiceNow's framework — goal-driven, tool-using, distinct from a scripted chatbot.
  • Agent Studio — orchestrating multiple agents, defining the tools and actions an agent is allowed to call.
  • Build Agent — developer-assist agents built around spec-to-code type workflows.
  • Otto — where it fits into the broader agentic positioning; worth tracking closely since this is actively evolving.

Checkpoint: you can explain the conceptual difference between "a flow with an AI step in it" and "an agent with tools and a goal." Roughly 3–4 weeks.

5. Action Fabric & MCP: The Integration Layer Underneath the Agents

This is the plumbing layer connecting ServiceNow's agents to external tools and models.

What to Learn

  • Conceptual understanding of Model Context Protocol (MCP) — how it differs from a traditional REST integration.
  • How Action Fabric exposes ServiceNow capabilities as callable actions.
  • If going hands-on with community MCP servers connecting external AI tools to a PDI: go in with eyes open about write operations executing without confirmation prompts, and any local dependencies certain slash-commands may require.

Checkpoint: explain, to a non-technical stakeholder, what MCP actually does — in one sentence. Roughly 2–3 weeks.

6. Governance & Platform Impact: The Part Beginners Skip

Often skipped by beginners — shouldn't be, especially in enterprise or multi-instance environments. This one runs in parallel to everything above rather than as a final step.

What to Learn

  • Data residency — where AI processing actually happens (your tenant vs. shared infrastructure).
  • License and consumption model impact of enabling AI features across modules.
  • How generative outputs interact with existing approval and audit trails.
  • Infrastructure dependencies underneath it all — platform performance under growing AI workload is a real constraint, not a footnote.

Checkpoint: be the person in the room who asks "where does this data actually go?" before rollout, not after.

Suggested Pacing

Total: roughly 10–15 weeks for someone working through this alongside a day job, assuming a few hours of PDI time each week.

Stage Time Prerequisite
1. Platform Fundamentals 2–3 weeks None
2. Now Assist (Consumer) 1–2 weeks Stage 1
3. Now Assist for Creator 2–3 weeks Stage 2
4. Agentic AI (Otto / Agent Studio / Build Agent) 3–4 weeks Stage 3
5. Action Fabric / MCP 2–3 weeks Stage 4
6. Governance Ongoing Parallel to all stages

Final Thoughts

The biggest mistake beginners make is jumping straight to Agent Studio or MCP because that's what's trending, without the fundamentals underneath. It creates confusion about what's actually happening on the platform versus what's marketing language.

Build the base first. The AI layer makes a lot more sense once you can see what it's standing on — and the governance questions in the final stage aren't really beginner topics either, in the same way that picking the right integration pattern isn't. They're the questions that only start to matter once you're operating this at real scale, not just standing up your first agent in a PDI.