RHELS LAB
Contents · the agent book

Agent book · Tool pages

Agent onboarding — how an agent joins the team

If you are an agent starting work in this lab, this page is your front door. You hold one credential of your own; everything else you fetch from Vault, scoped to exactly what your work needs. Read Part A once to understand the plumbing, then keep Part B open while you work.

Part A — How it is set up

Identity: LDAP → Vault → per-service credentials

  • Your identity is a user in the lab directory (OpenLDAP, dc=agentops,dc=local) — for the Cursor agent, uid=svc-cursor-agent,ou=users — and a member of the directory group cn=agents,ou=groups. The directory is the same one the humans’ Argo CD, Grafana, and Harbor logins use; you are a machine member of the same team, not a side channel.
  • Vault (https://vault.rhels.com) has an LDAP auth method (ldap/). Vault binds the directory in-cluster to verify your password — the same trust domain; LDAPS at ldap.rhels.com is the tailnet-facing door, not the in-cluster path — then maps your directory groups to Vault policies. Group agents maps to the policy agent-cursor.
  • agent-cursor is read-only and enumerates leaf paths only: no listing parents, no writes, no deletes, nothing under secret/platform/*. The policy source is in git (rhels/local-k8s-gitops, vault-access/agents/agent-cursor.hcl) with the operator record beside it — if you believe you need a path you cannot read, that is a change request on the issue, not a workaround.
  • Tokens from the LDAP mount live 8 hours by default and are renewable up to a 24-hour maximum (mount tuning). Re-login with your bootstrap credential always works, so an expired token is a login away, never a page-the-owner event.
  • Your directory entry and its group also live in the directory seed (rhels/lab-agentops, gitops/modules/ldap/ldap.yaml, {SSHA} hash only), so a directory rebuild keeps your account.

Rotation and revocation

  • Rotate = change the directory password (seed hash updated to match) and update the escrow record (below). Downstream service credentials are unaffected — they are Vault reads, not copies tied to your password.
  • Revoke = disable the directory account or remove it from cn=agents. Outstanding Vault tokens die at expiry (≤24h) or immediately by accessor revocation.

The escrow

Your bootstrap password exists in exactly two places: your own environment (the owner provisioned it there) and an owner-side escrow record in Vault at secret/platform/agents/cursor-agent-ldap (keys username, password, note). Your policy deliberately cannot read it — the escrow is how the owner recovers or rotates you, not a place you fetch from.

Part B — How to use it (the agent runbook)

Your one bootstrap secret

Your LDAP username (svc-cursor-agent) and its password, which the owner placed in your environment/secret store. Nothing else is yours to hold long-term: fetch service credentials from Vault per session, use them, let them go.

Log in

export VAULT_ADDR=https://vault.rhels.com
vault login -method=ldap username=svc-cursor-agent
# (password prompt) — or non-interactively:
# curl -X POST $VAULT_ADDR/v1/auth/ldap/login/svc-cursor-agent \
#   -d '{"password": "<from your environment>"}'
vault kv get secret/lab/crc/cursor-agent   # sanity: your first read

Which Vault path unlocks which system

Vault pathKey(s)System it unlocks
secret/lab/crc/cursor-agenttokenCRC Kubernetes API — build a kubeconfig for https://api.crc.rhels.com with tls-server-name set to the operator proxy’s Tailscale machine name (the crc-operator device — see the Tailscale & Cloudflare page) and this service-account token; kubectl get nodes should answer crc Ready
secret/lab/harbor/ci-passwordusername, passwordHarbor (harbor.rhels.com) — registry login and Harbor API as the CI identity
secret/lab/argocd/mini-initial-adminpasswordArgo CD, tooling plane (argo.rhels.com), user admin. CRC’s Argo CD is OAuth-only — there is no password door; work it through the CRC access above
secret/lab/grafana/crc-adminusername, passwordCRC Grafana — API basic auth

Anything not in this table is out of your policy’s reach by design (you will get a clean 403 — that is the system working).

Tools and team protocol

  • Agent/tester images (2026-11-01): sources are in rhels/lab-monorepo (agents/tester-developer and agents/tester-admin). They are pipeline-built with a Trivy CRITICAL gate, cosign keyless-signed on main, pushed to Harbor’s agents project, and digest-pinned in GitOps (all ten references). The hand-built path is retired (agent-testers/images/ removed). lab-monorepo#72 closed; GitOps PR #127 merged.
  • Work flows through GitHub issues on the lab repos: Spark drafts and coordinates, Tesla reviews, execution starts when both agree — decisions follow the crew’s ZEN.md (rhels/team). Git is the source of truth; never commit a credential, and never print one into an issue, a log, or a chat.