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:
| Setting | Description |
|---|---|
name | A name for this scan, unique within the source. |
query | Integration-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_language | spl, esql or none. |
lookback_window_seconds | How 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
| Category | Integration | Vendor key |
|---|---|---|
| Cloud AI platforms | Google Cloud Vertex AI Agent Engine | gcp_vertex |
| Cloud AI platforms | Google Cloud Compute Engine | gcp_compute_engine |
| Employee endpoints | Jamf Pro | jamf_pro |
| Security telemetry (SIEM) | Splunk Enterprise | splunk_enterprise |
| Security telemetry (SIEM) | Elastic Security | elastic_security |
| Arthur Evaluation Engine | OTEL sink | (no configuration) |
Google Cloud Vertex AI Agent Engine (gcp_vertex)
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
| Field | Required | Sensitive | Default | Description |
|---|---|---|---|---|
project_id | Yes | No | The GCP project ID (for example my-gcp-project), not the project name or number. | |
location | No | No | us-central1 | The region to scan. |
service_account_key | Yes* | Yes | The 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
| Setting | Value |
|---|---|
query | "" |
query_language | none |
lookback_window_seconds | Ignored. 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)
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
- Deploy the Arthur discovery collector to your VMs. It runs on a schedule through an OS policy.
- Enable guest attributes by setting the metadata key
enable-guest-attributes=TRUEon each VM or on its project. Arthur reports VMs without it asguest-attributes-disabledand doesn't read them.
Source fields
| Field | Required | Sensitive | Default | Description |
|---|---|---|---|---|
project_ids | Yes | No | Comma-separated GCP project IDs to scan, for example prod-fleet,dev-fleet. | |
include_labels | No | No | All VMs | Comma-separated key=value VM labels. Only VMs with at least one of these labels are scanned. |
exclude_labels | No | No | None | Comma-separated key=value VM labels. VMs with any of these labels are skipped. If a VM matches both lists, it's excluded. |
service_account_key | Yes* | Yes | The 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
| Setting | Value |
|---|---|
query | "" to use Arthur's built-in agent catalog, or your own catalog YAML. |
query_language | none |
lookback_window_seconds | Arthur 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.listcompute.instances.getGuestAttributescompute.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)
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
- Create the Arthur Extension Attribute in Jamf Pro.
- Deploy the Arthur discovery collector with a Jamf policy.
- 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
| Field | Required | Sensitive | Default | Description |
|---|---|---|---|---|
base_url | Yes | No | Your Jamf Pro URL, for example https://yourcompany.jamfcloud.com. Must be https://. | |
client_id | Yes | Yes | The Jamf Pro API client ID. | |
client_secret | Yes | Yes | The Jamf Pro API client secret. | |
include_groups | No | No | All computers | Comma-separated computer group names. Only computers in at least one of these groups are scanned. |
exclude_groups | No | No | None | Comma-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
| Setting | Value |
|---|---|
query | "" to use Arthur's built-in agent catalog, or your own catalog YAML. |
query_language | none |
lookback_window_seconds | Only 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_groupsorexclude_groups.
Splunk Enterprise (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
| Field | Required | Sensitive | Default | Description |
|---|---|---|---|---|
base_url | Yes | No | The Splunk management port URL, for example https://splunk.example.com:8089. Must be https://. | |
auth_token | Yes | Yes | A Splunk authentication token. | |
ca_certificate | No | No | A PEM CA certificate to trust in addition to the system CAs, for a server using a private CA. | |
tls_verification | No | No | full | full 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
| Setting | Value |
|---|---|
query | Your 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_language | spl |
lookback_window_seconds | Sent 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)
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
| Field | Required | Sensitive | Default | Description |
|---|---|---|---|---|
elasticsearch_url | Yes | No | Your Elasticsearch URL, for example https://es.example.com:9200. Must be https://. | |
api_key | Yes | Yes | The API key's encoded value (base64 of id:api_key), as Elasticsearch shows it when the key is created. | |
ca_certificate | No | No | A PEM CA certificate to trust in addition to the system CAs. | |
tls_verification | No | No | full | full, 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
| Setting | Value |
|---|---|
query | Your ES|QL query. It must return the columns in the SIEM query output contract, named with STATS ... BY, EVAL, RENAME and KEEP. |
query_language | esql |
lookback_window_seconds | Applied 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 10000Replace 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.
| Column | Required | Type | Description |
|---|---|---|---|
external_id | Yes | String | A 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. |
name | Yes | String | A human-readable agent name. |
last_seen | Yes | Timestamp | When the agent was last observed. |
llm_models | No | String or list of strings | Models the agent called. |
tools | No | String or list of strings | Tools the agent used. |
sub_agents | No | String or list of strings | Other agents this agent called. |
data_sources | No | String or list of URLs | Data 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
| Category | Integration |
|---|---|
| Cloud AI platforms | AWS Bedrock AgentCore |
| Cloud AI platforms | Azure AI Foundry |
| Cloud AI platforms | Vercel |
| Employee endpoints | CrowdStrike Falcon |
| Employee endpoints | Microsoft Defender for Endpoint |
| Security telemetry (SIEM) | Microsoft Sentinel |
| Network and gateway logs | AWS CloudWatch Logs |
| Network and gateway logs | Google Cloud Logging |
| Network and gateway logs | LiteLLM proxy |
| Network and gateway logs | Kong Konnect |
Don't see a system you use? Contact us. We prioritize new integrations based on customer demand.
Updated 10 minutes ago