> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Private Agent for Argo CD (Early Access)

> Give AI SRE bounded, read-only access to private Argo CD applications, deployment status, resources, events, and sync policy.

<Warning>
  **Early Preview:** Rootly Private Agent is under active development and available only to approved customers. Features, configuration, limits, and APIs may change before general availability. Confirm the approved agent and backend versions with your Rootly representative before production use.
</Warning>

The native Argo CD provider adds GitOps deployment context to Rootly AI SRE. It
connects directly to the authenticated Argo CD API inside your network and
exposes only bounded read operations. It does not require an Argo CD MCP server
or CLI and cannot sync, refresh, roll back, delete, or mutate an application.

One agent can connect to multiple Argo CD instances. Each entry has its own
stable provider ID, API endpoint, token, TLS trust, project scope, health, and
execution capacity. Choose an ID that is unique across every provider in the
Rootly account so registration and routing remain unambiguous. Rootly routes a
tool call to one exact registered instance; it cannot substitute another host
or credential.

<Info>
  Argo CD support requires matching early-access agent and Rootly backend builds. Confirm availability with your Rootly representative before rollout.
</Info>

## Create a read-only Argo CD identity

Use a dedicated Argo CD account or SSO identity. Do not use the `admin` account.
For a local account, enable only token generation in `argocd-cm`:

```yaml theme={null}
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  accounts.rootly-private-agent: apiKey
```

Grant only the projects the agent should diagnose in `argocd-rbac-cm`:

```yaml theme={null}
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.csv: |
    p, role:rootly-private-agent, applications, get, payments/*, allow
    p, role:rootly-private-agent, applications, get, platform/*, allow
    p, role:rootly-private-agent, projects, get, payments, allow
    p, role:rootly-private-agent, projects, get, platform, allow
    g, rootly-private-agent, role:rootly-private-agent
```

Generate a token according to your Argo CD account and SSO policy, write only
the token value to a Kubernetes Secret, and mount it as a file. Prefer an expiry
and rotate the projected Secret before it expires. The agent rereads the token
for requests, so projected token changes do not require editing the agent YAML.

If you explicitly enable destination-cluster inventory, also grant
`clusters, get` for the intended objects. The agent strips cluster credentials and
namespace lists, but cluster names, API server addresses, versions, and health
remain sensitive inventory. Leave this capability disabled unless AI SRE needs it.

## Configure instances with Helm

Create the Argo CD token Secret separately. The `rootly-private-agent` namespace
must already exist; on a first install, run this after the base Helm installation
has created the namespace.

```bash theme={null}
kubectl create secret generic rootly-private-agent-argocd \
  --namespace rootly-private-agent \
  --from-file=token=./argocd-token \
  --from-file=ca.pem=./argocd-ca.pem
```

Omit both `--from-file=ca.pem` and `ca_bundle_file` when the Argo CD certificate
chains to a CA already trusted by the agent image.

<Warning>
  The agent image runs as UID/GID `65532`. For Kubernetes Secret volumes using
  mode `0440`, set Pod-level `securityContext.fsGroup: 65532` so the process can
  read the token and optional TLS files. Do not make these files world-readable.
</Warning>

Add the provider and mount to your Helm values:

```yaml theme={null}
providers:
  argocd:
    - id: deployments-production-us-west-2
      url: https://argocd.production.internal
      token_file: /run/secrets/argocd-production/token
      ca_bundle_file: /run/secrets/argocd-production/ca.pem
      policy:
        allowed_projects:
          - payments
          - platform
        allow_cluster_inventory: false
        maximum_concurrency: 2

extraVolumes:
  - name: argocd-production
    secret:
      secretName: rootly-private-agent-argocd
      defaultMode: 0440
extraVolumeMounts:
  - name: argocd-production
    mountPath: /run/secrets/argocd-production
    readOnly: true
```

`url` must use HTTPS. Mount a private CA when needed. Mutual TLS is supported
with paired `client_certificate_file` and `client_key_file` paths. There is no
skip-certificate-verification option. Plain HTTP requires
`allow_insecure_http: true` and is intended only for local testing.

An empty `allowed_projects` list permits every project the Argo CD identity can
read. A non-empty list is an additional local boundary: list calls are scoped
automatically, and application-specific calls must name one allowed project.
Rootly cannot expand this list remotely.

## Available tools

| Tool                           | Diagnostic use                                                                      |
| ------------------------------ | ----------------------------------------------------------------------------------- |
| `argocd.list_applications`     | Find degraded, progressing, or out-of-sync applications                             |
| `argocd.get_application`       | Inspect source, destination, health, sync, conditions, operation state, and history |
| `argocd.get_resource_tree`     | Inspect application ownership, resource health, images, and parent relationships    |
| `argocd.get_managed_resources` | Compare bounded desired and live Kubernetes manifests                               |
| `argocd.list_resource_events`  | Read Kubernetes events for an application or one managed resource                   |
| `argocd.get_sync_windows`      | Determine whether an assigned window permits or blocks deployment                   |
| `argocd.get_project`           | Inspect permitted sources, destinations, roles, and sync windows                    |
| `argocd.list_clusters`         | Inspect sanitized destination-cluster status when locally enabled                   |

Every tool is a sensitive read. There is no generic REST proxy and no
application create, update, delete, sync, rollback, terminate-operation,
refresh, resource-action, repository, certificate, account, or session tool.

## Data redaction and limits

Before a result leaves your network, the agent removes:

* Secret and ConfigMap `data`, `binaryData`, and `stringData`;
* literal container environment values;
* Kubernetes managed fields and the kubectl last-applied annotation;
* common password, token, client-secret, private-key, and key-data fields;
* repository URL credentials and query strings;
* free-form application renderer configuration such as Helm values and parameters;
* Argo CD cluster connection configuration and namespace lists.

Counts for applications, resources, events, clusters, and history are bounded.
Embedded desired/live manifests, the complete result, request duration, and
concurrency are also bounded. Truncated arrays carry explicit metadata; a result
that remains too large is rejected so AI SRE can narrow the request. See
[Private Agent Limits](/private-agent-limits#argo-cd) for defaults and ceilings.

Results can enter AI model context, evaluation traces, and investigation or
conversation history under the [Private Agent retention model](/ai/data-privacy-for-rootly-ai#how-is-private-agent-data-logged-and-retained).

## Health, compatibility, and routing

Health uses Argo CD's authenticated version endpoint and is cached for 15
seconds. Invalid tokens, TLS failures, or an unavailable Argo CD API mark only
that configured instance unhealthy. Other Argo CD and provider instances remain
registered; overall agent readiness is stricter and is not ready while any
instance is unhealthy.

In **AI → Configurations → Private Agent**, verify the provider ID, health,
last check, and advertised capabilities. `argocd.list_clusters` appears
only when cluster inventory is enabled locally.

Compatibility CI installs the latest patch of every stable Argo CD minor still
covered by the upstream three-minor support policy. The current required matrix
is Argo CD 3.3, 3.4, and 3.5. Release candidates and EOL
minor versions are not certified.
