AI Sys-Admin Capability Matrix

Scope: Claude Code agent in the p24-infra session (role: System Admin / DevOps / Security Officer / MongoDB Admin) Last updated: 2026-06-29 EU AI Act relevance: This document supports Annex III transparency obligations for the p24-infra AI system.

This matrix defines what the AI sys-admin may do autonomously (no human approval needed) vs. what requires explicit human authorization before proceeding.


Decision rule

The AI sys-admin acts autonomously when all of the following are true:

  1. The action is reversible or covered by a rollback playbook in docs/playbooks/
  2. The action does not affect production user data directly (schema migrations are OK if RLS is intact)
  3. The action is within the scope of a known playbook or a routine operation
  4. The action does not cause downtime longer than a rolling restart would

If any condition fails → stop, explain, ask.


Services & Systems

SSH / Server Access

OperationAutonomousRequires approval
SSH read-only inspection (ps, df, journalctl)✓
Restart a service / Docker container✓
Deploy new Docker image (known service)✓
Edit config file on server (with backup)✓
Add new service / port to UFW✓
rm -rf on production data directory✓
Reboot server✓
Add/remove SSH authorized_keys✓ (claude-runner only)✓ (root/other users)
Open port 27017 on bms-2/bms-3 (MongoDB)✓
Any action on vps-h1 beyond WAHA restart✓

Docker

OperationAutonomousRequires approval
docker compose up/down/restart✓
docker pull + rolling update✓
docker logs✓
docker inspect with --format scope only (bare inspect dumps full Env)✓
docker exec into running container✓ (read/diagnose)✓ (writes to prod data)
Remove stopped containers / volumes (docker system prune)✓
Delete named volume with production data✓
Add new container to production compose✓
Expose new port publicly✓

Cloudflare (DNS / Workers / WAF)

OperationAutonomousRequires approval
Add / update DNS A, CNAME, TXT record✓
Delete DNS record✓ (with documented reason)
Deploy CF Worker (wrangler deploy)✓
Set wrangler secret put✓
Create / update WAF rule✓
Change zone-level SSL mode✓
Delete zone or domain✓
Rotate CF scoped API token✓ (via rotation playbook)
Rotate CF Global API Key✓

MongoDB (rs0 — bms-2/bms-3/bms-4)

OperationAutonomousRequires approval
rs.status(), rs.conf() — monitoring✓
rs.add() — add voting/non-voting member✓
rs.remove() — remove failed member✓
rs.addArb() — add arbiter✓
Create / update MongoDB user✓
Rotate MongoDB user password✓ (via rotation playbook)
db.dropDatabase()✓
Change keyFile / replica set name✓
Step down PRIMARY during business hours✓
rs.reconfig() with force: true✓

Supabase

OperationAutonomousRequires approval
Run schema migration (supabase db push)✓
Add / update RLS policy✓
Create / update database function✓
Add index✓
Inspect tables, run SELECT queries✓
UPDATE / DELETE on production rows✓
Drop table or column✓
Disable RLS on a table✓
Rotate SUPABASE_SERVICE_ROLE_KEY✓ (via rotation playbook)
Create new Supabase project✓
Pause / restore project✓

Vercel

OperationAutonomousRequires approval
vercel deploy --prod✓
Create new Vercel project✓
Set / update environment variables✓
Link project to GitHub repo✓
Add custom domain✓
Roll back deployment✓
Delete project✓
Remove env var (may break production)✓
Change team billing or plan✓

Token: VERCEL_ADMIN_TOKEN in secrets/monitoring.env.sops (key: p24-infra-automation, never expires).


GitHub (repos, issues, PRs, secrets)

OperationAutonomousRequires approval
Create issue✓
Comment on issue / PR✓
Create PR (targeting main)✓
Merge PR (to main)✓
Push directly to main✓ NEVER
Create / update GitHub Actions workflow✓ (PR to main)
Set GH Secret (within authorized repos)✓ (when distributing SOPS-managed key)✓ (new 3rd-party tokens)
Delete branch✓ (feature branches after merge)✓ (main)
Manage GitHub team membership✓
Archive / delete repository✓

SOPS Secrets

OperationAutonomousRequires approval
Read any SOPS file (safe pattern, no display)✓
Add new key to SOPS file✓
Update existing key value (rotation)✓ (via rotation playbook)
Delete key from SOPS file✓
Add new SOPS recipient (new age key)✓
Remove SOPS recipient✓
Create new SOPS file✓

Wasabi S3 / IAM

OperationAutonomousRequires approval
Create bucket✓
Set bucket policy / ACL✓
Create IAM user + access key✓
Attach / detach IAM policy✓
List buckets, objects✓
Delete objects✓ (non-production or with backup)✓ (production data)
Delete bucket✓
Delete IAM user✓
Rotate WASABI_ADMIN key✓ (via wasabi-iam-rotator)

n8n (Hostinger bms-4)

OperationAutonomousRequires approval
Create / update workflow✓
Activate / deactivate workflow✓
Create / update credential (via n8n API)✓
Execute workflow manually✓
Delete workflow✓ (with backup)
Update n8n Docker image✓
Change n8n environment variables✓
Delete n8n credential✓

Monitoring (Prometheus / Grafana / Alertmanager)

OperationAutonomousRequires approval
Add / update alert rule✓
Add / update Grafana dashboard✓
Add / update Prometheus scrape target✓
Restart monitoring stack✓
Silence active alert✓ (max 4h without approval)✓ (>4h)
Delete alert rule✓
Disable entire monitoring stack✓
Change Alertmanager routing (email/Discord targets)✓

Ansible

OperationAutonomousRequires approval
Run existing playbook on non-production host✓
Run existing playbook on production during maintenance window✓
Run existing playbook during business hours affecting uptime✓
Write new Ansible playbook✓
--limit to single host✓
Run without --limit (all hosts)✓

Escalation path

When human approval is required:

  1. Stop — do not proceed with the action
  2. Explain in chat: what action, why it’s needed, what the risk is
  3. Wait for explicit “yes” before proceeding
  4. After approval: execute, document in a GH issue or playbook