skills/genai/build-agent/SKILL.md
Build custom AI agents for ServiceNow including agent capabilities, knowledge sources, tool access, conversational flows, and guardrails
npx skillsauth add happy-technologies-llc/happy-servicenow-skills build-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides a comprehensive guide to building custom AI agents in ServiceNow:
When to use: When building a new virtual agent topic, extending Now Assist skill capabilities, creating a domain-specific AI assistant, or configuring agent tool access for automated task execution.
admin, va_admin, or now_assist_admincom.glide.cs.chatbot (Virtual Agent), com.snc.now_assist (Now Assist) recommendedsys_cs_topic, sys_cs_intent, sys_cs_entity, sys_cb_topic, kb_knowledge tablesgenai/agent-miner for discovering what to automate, genai/skill-kit-custom for Now Assist skillsDocument the agent's purpose, target users, and boundaries.
=== AGENT DEFINITION ===
Name: [Agent Name]
Domain: [IT Support / HR / Facilities / Custom]
Target Users: [Employee / Customer / Technician]
CAPABILITIES (What the agent CAN do):
- [ ] Answer questions about [topic]
- [ ] Create [record type] on behalf of users
- [ ] Look up [information type]
- [ ] Trigger [workflow/process]
- [ ] Escalate to [team] when needed
BOUNDARIES (What the agent CANNOT do):
- [ ] Access [restricted data/system]
- [ ] Approve [request type]
- [ ] Modify [critical records]
- [ ] Share [sensitive information]
SUCCESS METRICS:
- Deflection Rate Target: [%]
- User Satisfaction Target: [score]
- Resolution Rate Target: [%]
- Average Handle Time Target: [minutes]
Set up the knowledge base articles and data sources the agent will use for grounding.
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: kb_knowledge
query: kb_knowledge_base=[KB_SYS_ID]^workflow_state=published^active=true
fields: sys_id,number,short_description,kb_category,article_type
limit: 100
REST Approach:
GET /api/now/table/kb_knowledge
?sysparm_query=kb_knowledge_base=[KB_SYS_ID]^workflow_state=published^active=true
&sysparm_fields=sys_id,number,short_description,kb_category,article_type
&sysparm_limit=100
Verify knowledge coverage for each agent capability:
| Capability | KB Articles | Gaps Identified | |-----------|------------|-----------------| | Password reset | KB001, KB002 | None | | VPN setup | KB010 | Missing macOS instructions | | Software request | None | Need catalog mapping article |
Build the primary topic that defines the agent's conversational scope.
MCP Approach:
Tool: SN-Create-Record
Parameters:
table_name: sys_cs_topic
data:
name: "IT Support Assistant"
description: "Handles common IT support requests including password resets, VPN access, and software installations"
state: draft
category: IT
greeting_message: "Hi! I'm your IT Support Assistant. I can help with password resets, VPN access, software requests, and general IT questions. What do you need help with?"
no_match_message: "I'm not sure I understand. Could you rephrase your request, or would you like me to connect you with a live agent?"
max_retries: 3
REST Approach:
POST /api/now/table/sys_cs_topic
Body: {
"name": "IT Support Assistant",
"description": "Handles common IT support requests",
"state": "draft",
"category": "IT",
"greeting_message": "Hi! I'm your IT Support Assistant...",
"no_match_message": "I'm not sure I understand...",
"max_retries": "3"
}
Create intents that the agent should recognize and respond to.
MCP Approach:
Tool: SN-Create-Record
Parameters:
table_name: sys_cs_intent
data:
name: "Reset Password"
topic: [TOPIC_SYS_ID]
description: "User wants to reset their password for any system"
training_utterances: |
I need to reset my password
My password expired
I can't log in
Password not working
Forgot my password
Need a new password
Locked out of my account
Account locked
Can't access my account
Reset credentials
Repeat for each capability:
| Intent | Sample Utterances | Entity Slots | |--------|------------------|--------------| | Reset Password | "reset my password", "locked out" | system_name, username | | VPN Access | "connect to VPN", "VPN not working" | vpn_type, device_type | | Software Install | "install software", "need [app]" | software_name, justification | | General Question | "how do I...", "what is..." | topic_keyword |
Create entities to extract structured data from user messages.
MCP Approach:
Tool: SN-Create-Record
Parameters:
table_name: sys_cs_entity
data:
name: "system_name"
topic: [TOPIC_SYS_ID]
type: "list"
prompt: "Which system do you need the password reset for?"
required: true
values: |
Active Directory|AD|Windows login
Email|Outlook|Exchange
VPN|Cisco AnyConnect
SAP|ERP
Salesforce|CRM
REST Approach:
POST /api/now/table/sys_cs_entity
Body: {
"name": "system_name",
"topic": "[TOPIC_SYS_ID]",
"type": "list",
"prompt": "Which system do you need the password reset for?",
"required": "true"
}
Define what actions the agent can perform in ServiceNow.
MCP Approach:
Tool: SN-Create-Record
Parameters:
table_name: sys_cb_action
data:
topic: [TOPIC_SYS_ID]
name: "Create Incident for Password Reset"
action_type: "create_record"
table: "incident"
field_values: |
category=inquiry
subcategory=password
short_description=Password reset request: ${system_name}
assignment_group=IT Help Desk
caller_id=${sys_user}
urgency=3
impact=3
REST Approach:
POST /api/now/table/sys_cb_action
Body: {
"topic": "[TOPIC_SYS_ID]",
"name": "Create Incident for Password Reset",
"action_type": "create_record",
"table": "incident",
"field_values": "category=inquiry^subcategory=password^short_description=Password reset request"
}
Common Action Types:
| Action Type | Purpose | Configuration | |------------|---------|---------------| | create_record | Create a new record | table, field_values | | update_record | Update existing record | table, sys_id, field_values | | query_record | Look up records | table, query, return_fields | | run_flow | Trigger a Flow Designer flow | flow_sys_id, inputs | | run_script | Execute server-side script | script body | | kb_search | Search knowledge base | query, kb_base | | escalate | Transfer to live agent | queue, message |
Configure safety boundaries and compliance controls.
Input Guardrails:
Tool: SN-Create-Record
Parameters:
table_name: sys_cs_topic_goal
data:
topic: [TOPIC_SYS_ID]
name: "Input Validation"
type: "guardrail"
configuration: |
BLOCKED_INTENTS:
- Requests for other users' personal data
- Attempts to bypass approval processes
- Requests for admin/root access
INPUT_SANITIZATION:
- Strip HTML/script tags from user input
- Validate employee ID format before lookup
- Limit free-text input to 500 characters
AUTHENTICATION:
- Require verified session for record creation
- Verify caller identity before sharing account details
- MFA challenge for sensitive operations
Output Guardrails:
RESPONSE RULES:
- Never expose sys_id values or internal table names to users
- Never share other employees' personal information
- Always confirm destructive actions before executing
- Include disclaimer for estimated timeframes
- Redirect compliance/legal questions to appropriate teams
- Log all agent actions for audit trail
ESCALATION TRIGGERS:
- User expresses frustration (sentiment < -0.5)
- 3 consecutive failed intent matches
- Request involves VIP or executive user
- Security-related request (account compromise)
- Agent confidence score below threshold (< 0.7)
Map out the full conversational flow for each intent.
CONVERSATION FLOW: Password Reset
[User Message] -> Intent Recognition -> "Reset Password" (confidence > 0.8)
|
v
[Slot: system_name] -> "Which system?" -> User provides system
|
v
[Slot: username] -> "What is your username?" -> User provides username
|
v
[Validation] -> Verify user exists in system
|-- User found -> Proceed
|-- User not found -> "I couldn't find that username. Please verify and try again."
|
v
[Action] -> Trigger password reset flow
|-- Success -> "Your password has been reset. Check your email for the temporary password."
|-- Failure -> "I wasn't able to reset your password. Let me connect you with a live agent."
|
v
[Follow-up] -> "Is there anything else I can help you with?"
Validate agent behavior with test scenarios.
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_topic
query: sys_id=[TOPIC_SYS_ID]
fields: sys_id,name,state,test_status,last_tested
Test Matrix:
| Test Case | Input | Expected Behavior | Result | |-----------|-------|-------------------|--------| | Happy path | "Reset my AD password" | Collect username, trigger reset | | | Missing entity | "Reset my password" | Ask which system | | | Unknown intent | "What's the weather?" | No-match response | | | Guardrail trigger | "Reset John's password" | Refuse, explain why | | | Escalation | "This isn't working, get me a human" | Transfer to live agent | | | Edge case | Empty message | Prompt for input | |
Publish the agent and set up monitoring.
MCP Approach:
Tool: SN-Update-Record
Parameters:
table_name: sys_cs_topic
sys_id: [TOPIC_SYS_ID]
data:
state: published
Post-Deployment Monitoring Queries:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_conversation
query: topic=[TOPIC_SYS_ID]^sys_created_on>=javascript:gs.daysAgo(7)
fields: sys_id,state,live_agent,transfer_reason,user_satisfaction,sys_created_on
limit: 100
| Tool | Purpose | When to Use | |------|---------|-------------| | SN-Query-Table | Find existing topics, intents, and knowledge articles | Discovery and validation | | SN-Create-Record | Create topics, intents, entities, and actions | Building agent components | | SN-Update-Record | Modify agent settings, publish topics | Configuration and deployment | | SN-Get-Table-Schema | Discover topic and intent table structures | Initial setup | | SN-Read-Record | Get detailed record for specific topic or intent | Reviewing existing configurations |
| Issue | Cause | Resolution | |-------|-------|------------| | Agent not recognizing intents | Insufficient or poor training utterances | Add more diverse utterances; include typos and abbreviations | | Wrong intent matched | Overlapping utterances between intents | Review and deduplicate training data; increase confidence threshold | | Entity not extracted | Entity values do not match user input | Add synonyms and variations to entity value list | | Action fails silently | Missing permissions or invalid field mapping | Check agent user roles; validate field names against table schema | | Agent loops on same question | Required slot not being filled by user response | Add skip logic or alternative slot-filling prompts | | High escalation rate | Agent scope too narrow or responses not helpful | Expand knowledge sources; review escalated conversations for patterns |
Scenario: Build a virtual agent for common IT support requests.
AGENT: IT Support Assistant
INTENTS:
1. Password Reset -> Flow: Reset Password (AD, Email, VPN)
2. Software Request -> Action: Create RITM from catalog
3. VPN Troubleshooting -> KB Search: VPN articles
4. Hardware Issue -> Action: Create incident, escalate if P1
5. General IT Question -> KB Search: IT knowledge base
GUARDRAILS:
- Cannot reset passwords for other users
- Software requests require manager approval flow
- Hardware replacements require asset verification
Scenario: Build an agent for benefits enrollment questions.
AGENT: Benefits Assistant
INTENTS:
1. Benefits Overview -> KB: Benefits summary article
2. Enrollment Period -> KB: Open enrollment dates and process
3. Plan Comparison -> KB: Plan comparison matrix
4. Life Event Change -> Action: Create HR case for life event
5. Dependent Add/Remove -> Action: Create HR case with dependent info
GUARDRAILS:
- Cannot share other employees' benefits information
- Directs medical questions to benefits provider
- Logs all interactions for compliance
Scenario: Build an agent for workplace service requests.
AGENT: Facilities Assistant
INTENTS:
1. Room Booking -> Action: Query room availability, create reservation
2. Maintenance Request -> Action: Create facilities incident
3. Badge Access -> Action: Create access request RITM
4. Parking -> KB: Parking policy and waitlist info
5. Catering -> Action: Create catering request with details
GUARDRAILS:
- Room bookings limited to 4 hours maximum
- Maintenance requests auto-prioritized by type
- Badge access requires security team approval
genai/agent-miner - Discover automation opportunities from interaction datagenai/flow-generation - Build flows that agents can triggergenai/playbook-generation - Create playbooks for agent-assisted workflowsgenai/skill-kit-custom - Build custom Now Assist skillsknowledge/article-generation - Generate KB articles for agent knowledge sourcestesting
Manage supplier onboarding, qualification, performance monitoring, and offboarding with auditable lifecycle controls
tools
Identify emerging risks, prioritize intake signals, and route candidates into formal GRC risk assessment workflows
documentation
Screen inbound documents for completeness, policy risk, and routing readiness before extraction or case workflows
testing
Generate concise task summaries with status, timeline, blockers, SLA risk, and recommended next actions