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