Skip to main content

Agent Capability Scanner

The SquireX scanner is a static analysis engine for Salesforce Agentforce, ServiceNow Now Assist, MuleSoft Agent Fabric, and MCP servers. Unlike generic linters, it constructs a Semantic Graph across all metadata files and evaluates rules that span multiple file types and platforms.


Semantic Graphโ€‹

SquireX builds a cross-metadata graph before evaluating any rules:

GenAiPlanner
โ”‚ orchestrates
โ–ผ
GenAiPlugin (Topic)
โ”‚ contains
โ–ผ
GenAiFunction (Action)
โ”‚ invokes
โ–ผ
Apex Class โ”€โ”€โ”€โ”€ shares โ”€โ”€โ”€โ”€ SObject Schema
โ”‚ โ”‚
โ”œโ”€โ”€ calls โ”€โ”€โ–บ Flow โ””โ”€โ”€ lookup โ”€โ”€ CustomField
โ”œโ”€โ”€ calls โ”€โ”€โ–บ PromptTemplate โ”€โ”€โ–บ PromptTemplateActv
โ”œโ”€โ”€ publishes โ”€โ”€โ–บ PlatformEvent โ”€โ”€โ–บ ApexTrigger
โ””โ”€โ”€ callout โ”€โ”€โ–บ NamedCredential โ”€โ”€โ–บ ConnectedApp

MCPServerConfig โ”€โ”€ exposes โ”€โ”€โ–บ MCPTool โ”€โ”€ shadows? โ”€โ”€โ–บ GenAiFunction
โ”‚
โ””โ”€โ”€ connects โ”€โ”€โ–บ AgentFabric โ”€โ”€ policy โ”€โ”€โ–บ AgentFabricPolicy

23 node types ยท 21 edge types ยท O(1) lookup ยท BFS traversal ยท 4 platforms

This graph is what enables rules like AGENTFORCE-1.3 (privilege analysis) to trace from an agent action all the way down to the Apex sharing model on the target class โ€” something no single-file linter can do.


How Rules are Evaluatedโ€‹

  1. Discovery โ€” All supported metadata files are loaded from the target directory
  2. Parsing โ€” 25+ type-specific parsers extract structured ASTs (including .mcp.json, agent-network.yaml, Update Set XML, sn_aia_agent, GlideScript)
  3. Linking โ€” The semantic graph is constructed from cross-file references
  4. Rule Engine โ€” rules execute graph traversals and pattern matches
  5. SARIF Generation โ€” Results written as SARIF v2.1.0 with line-level locations

Performanceโ€‹

Project SizeFilesDuration
Small (< 10 agents)~30 files~150ms
Medium (< 50 agents)~150 files~400ms
Large (100+ agents)~500 files~1.2s

Go engine handles rule evaluation; TypeScript handles parsing. The boundary is a JSON IPC channel.