Agent Discovery Integrations

Agent Discovery Integrations

Arthur finds the AI agents running across your organization by connecting to systems you already use. This page is the configuration reference for each integration: what it discovers, the fields it takes, and the permissions its credentials need.

How a discovery source is configured

A discovery source has two parts:

  • Source fields: how Arthur connects to the system: its URL, project or account, and credentials. Fields marked Sensitive are stored as secrets and never appear in logs or error messages.
  • Scan configs: what each scan does. A source can have more than one scan config. Each one has:
SettingDescription
nameA name for this scan, unique within the source.
queryIntegration-specific: an SPL or ES|QL query for a SIEM, an agent catalog for an endpoint source, or empty. Each integration below says what it expects.
query_languagespl, esql or none.
lookback_window_secondsHow far back each scan looks, rounded up to whole hours. 0 means "everything" for the integrations that support it. Inventory sources such as Vertex AI ignore this setting.

Every integration accepts only https:// URLs.


Available integrations

CategoryIntegrationVendor key
Cloud AI platformsGoogle Cloud Vertex AI Agent Enginegcp_vertex
Cloud AI platformsGoogle Cloud Compute Enginegcp_compute_engine
Employee endpointsJamf Projamf_pro
Security telemetry (SIEM)Splunk Enterprisesplunk_enterprise
Security telemetry (SIEM)Elastic Securityelastic_security
Arthur Evaluation EngineOTEL sink(no configuration)

Google Cloud Vertex AI Agent Engine (gcp_vertex)

Lists every agent deployed to Vertex AI Agent Engine in one GCP project and region. To cover more regions or projects, add one source for each.

Source fields

FieldRequiredSensitiveDefaultDescription
project_idYesNoThe GCP project ID (for example my-gcp-project), not the project name or number.
locationNoNous-central1The region to scan.
service_account_keyYes*YesThe full JSON key of a GCP service account.

* Required unless your Arthur engine runs on GCP and has been configured to use its own Application Default Credentials (ARTHUR_ENGINE_GCP_VERTEX_ALLOW_ADC=true).

Scan config

SettingValue
query""
query_languagenone
lookback_window_secondsIgnored. Every scan returns every agent engine in the region.

Required permissions

The service account needs only aiplatform.reasoningEngines.list on the project. The predefined role roles/aiplatform.viewer includes it. For least privilege, grant a custom role with just that permission.


Google Cloud Compute Engine (gcp_compute_engine)

Discovers agentic coding tools, local agents, AI browsers and browser extensions installed on your Compute Engine VMs. The Arthur discovery collector runs on each VM and writes its results to the VM's guest attributes, and Arthur reads them through the Compute Engine API.

Before you start

  1. Deploy the Arthur discovery collector to your VMs. It runs on a schedule through an OS policy.
  2. Enable guest attributes by setting the metadata key enable-guest-attributes=TRUE on each VM or on its project. Arthur reports VMs without it as guest-attributes-disabled and doesn't read them.

Source fields

FieldRequiredSensitiveDefaultDescription
project_idsYesNoComma-separated GCP project IDs to scan, for example prod-fleet,dev-fleet.
include_labelsNoNoAll VMsComma-separated key=value VM labels. Only VMs with at least one of these labels are scanned.
exclude_labelsNoNoNoneComma-separated key=value VM labels. VMs with any of these labels are skipped. If a VM matches both lists, it's excluded.
service_account_keyYes*YesThe full JSON key of a GCP service account.

* Required unless your Arthur engine runs on GCP and has been configured to use its own Application Default Credentials (ARTHUR_ENGINE_GCP_COMPUTE_ENGINE_ALLOW_ADC=true).

Label matching is exact. If no VM has a label in your selectors, the scan logs a warning and continues; it doesn't fail.

Scan config

SettingValue
query"" to use Arthur's built-in agent catalog, or your own catalog YAML.
query_languagenone
lookback_window_secondsArthur lists every VM on every scan. VMs whose collector hasn't reported within this window are counted as not-reported-in-window and their results aren't published. 0 publishes every VM's most recent report.

Required permissions

  • compute.instances.list
  • compute.instances.getGuestAttributes
  • compute.projects.get. Needed only when guest attributes are enabled at the project level rather than on each VM.

The predefined role roles/compute.viewer includes all three.


Jamf Pro (jamf_pro)

Discovers agentic coding tools, autonomous local agents, AI browsers and browser extensions on your managed Macs. The Arthur discovery collector runs on each Mac and reports through a Jamf Extension Attribute. Arthur reads those results from the Jamf Pro API. Arthur makes read-only API calls and never runs anything on a device.

Before you start

  1. Create the Arthur Extension Attribute in Jamf Pro.
  2. Deploy the Arthur discovery collector with a Jamf policy.
  3. Create an API role and API client in Jamf Pro (Settings → API roles and clients) with the privileges below, and generate a client secret.

Source fields

FieldRequiredSensitiveDefaultDescription
base_urlYesNoYour Jamf Pro URL, for example https://yourcompany.jamfcloud.com. Must be https://.
client_idYesYesThe Jamf Pro API client ID.
client_secretYesYesThe Jamf Pro API client secret.
include_groupsNoNoAll computersComma-separated computer group names. Only computers in at least one of these groups are scanned.
exclude_groupsNoNoNoneComma-separated computer group names. Computers in any of these groups are skipped. If a computer is in both lists, it's excluded.

A group name that doesn't exist in Jamf Pro fails the scan rather than being skipped. Otherwise a mistyped group name could quietly widen or empty the scan.

Scan config

SettingValue
query"" to use Arthur's built-in agent catalog, or your own catalog YAML.
query_languagenone
lookback_window_secondsOnly Macs that reported to Jamf within this window are read. 0 reads every computer.

Required permissions

The API role needs:

  • Read Computers
  • Read Smart Computer Groups and Read Static Computer Groups. Needed only if you set include_groups or exclude_groups.

Splunk Enterprise (splunk_enterprise)

Runs your SPL query as a Splunk search job over the lookback window. Each row the query returns becomes one discovered agent. Your query decides what counts as an agent: gateway logs, proxy logs, EDR events, or anything else Splunk indexes.

Source fields

FieldRequiredSensitiveDefaultDescription
base_urlYesNoThe Splunk management port URL, for example https://splunk.example.com:8089. Must be https://.
auth_tokenYesYesA Splunk authentication token.
ca_certificateNoNoA PEM CA certificate to trust in addition to the system CAs, for a server using a private CA.
tls_verificationNoNofullfull checks the certificate and hostname. ca_only checks only that a trusted CA issued the certificate; use it with ca_certificate for Splunk's default certificate, SplunkServerDefaultCert, which names no host. off disables verification and is not recommended.

Scan config

SettingValue
queryYour SPL query. It must return the columns in the SIEM query output contract, named with table or rename. A leading search is added if you leave it out.
query_languagespl
lookback_window_secondsSent as the search's earliest_time. Don't also set a time range in the query. 0 searches all time.

Required permissions

The token's role must be able to run searches and must be allowed to search every index your query reads (srchIndexesAllowed). If a scan returns zero rows, check index access first.


Elastic Security (elastic_security)

Runs your ES|QL query against Elasticsearch over the lookback window. Each row the query returns becomes one discovered agent. Query DSL isn't supported.

Source fields

FieldRequiredSensitiveDefaultDescription
elasticsearch_urlYesNoYour Elasticsearch URL, for example https://es.example.com:9200. Must be https://.
api_keyYesYesThe API key's encoded value (base64 of id:api_key), as Elasticsearch shows it when the key is created.
ca_certificateNoNoA PEM CA certificate to trust in addition to the system CAs.
tls_verificationNoNofullfull, ca_only or off, as for Splunk. ca_only suits Elasticsearch's auto-generated certificate when you connect through a hostname it wasn't issued for.

Scan config

SettingValue
queryYour ES|QL query. It must return the columns in the SIEM query output contract, named with STATS ... BY, EVAL, RENAME and KEEP.
query_languageesql
lookback_window_secondsApplied as a filter on @timestamp; your query text isn't changed. 0 searches all time.

Elasticsearch caps an ES|QL result at 1,000 rows by default, or 10,000 with LIMIT 10000. If a result reaches the cap, the scan logs a warning.

Required permissions

The API key needs only read on the indices your query names. No cluster privileges are needed.

Example: self-hosted Kong Gateway

Self-hosted Kong Gateway has no usage API, but if its http-log plugin ships to Elasticsearch and ai-proxy logs statistics (logging.log_statistics: true), this query lists one agent per Kong consumer and the models it used:

FROM kong-ai-logs
| WHERE consumer.id.keyword IS NOT NULL AND ai.proxy.meta.plugin_id.keyword IS NOT NULL
| EVAL model = CASE(
    response.status < 400 AND ai.proxy.meta.response_model.keyword IS NOT NULL,
    CONCAT(ai.proxy.meta.provider_name.keyword, "/", ai.proxy.meta.response_model.keyword),
    NULL)
| STATS last_seen = MAX(@timestamp),
        name = MAX(consumer.username.keyword),
        llm_models = VALUES(model)
    BY consumer_id = consumer.id.keyword
| EVAL external_id = CONCAT("kong:kong:8000:", consumer_id),
       name = COALESCE(name, consumer_id),
       llm_models = MV_SORT(llm_models)
| KEEP external_id, name, last_seen, llm_models
| SORT external_id
| LIMIT 10000

Replace kong-ai-logs with your index and kong:8000 with your Kong proxy's host. Once you've scanned, don't change the external_id prefix: it's each agent's permanent identifier.


Arthur Evaluation Engine OTEL sink

Every application or agent that sends OpenTelemetry GenAI traces to the Arthur Evaluation Engine is included in discovery automatically, including traces sent without a service name. There's nothing to configure beyond sending traces.


SIEM query output contract

Splunk and Elastic queries must return one row per agent, using only these column names. If a query returns a column not listed here, the scan fails as not_configured. Rename helper columns or drop them.

ColumnRequiredTypeDescription
external_idYesStringA stable, unique identifier for the agent. It's the agent's permanent key, so don't change how you build it once you've scanned.
nameYesStringA human-readable agent name.
last_seenYesTimestampWhen the agent was last observed.
llm_modelsNoString or list of stringsModels the agent called.
toolsNoString or list of stringsTools the agent used.
sub_agentsNoString or list of stringsOther agents this agent called.
data_sourcesNoString or list of URLsData sources the agent read.

A row with a blank external_id or name, or a last_seen that isn't a timestamp, is skipped and logged. The rest of the rows are still published. Leave out optional columns your data can't supply rather than returning them empty.


Coming soon

CategoryIntegration
Cloud AI platformsAWS Bedrock AgentCore
Cloud AI platformsAzure AI Foundry
Cloud AI platformsVercel
Employee endpointsCrowdStrike Falcon
Employee endpointsMicrosoft Defender for Endpoint
Security telemetry (SIEM)Microsoft Sentinel
Network and gateway logsAWS CloudWatch Logs
Network and gateway logsGoogle Cloud Logging
Network and gateway logsLiteLLM proxy
Network and gateway logsKong Konnect

Don't see a system you use? Contact us. We prioritize new integrations based on customer demand.


Did this page help you?