Memory

minio-aiops

Try it

Use this skill whenever the user needs to operate or diagnose MinIO object storage — explain why the cluster is filling up or refusing writes (capacity_rca), find publicly exposed buckets and hygiene gaps (bucket_exposure_audit), find storage that lifecycle/ILM should be reclaiming but isn't, including noncurrent versions and incomplete multipart uploads (lifecycle_gap_analysis), check heal backlog and erasure-set write-quorum risk (healing_health), read service health / cluster status / per-bucket config (policy, versioning, lifecycle, encryption, quota, tags) — plus governed writes (set or delete bucket policy, enable/suspend versioning, set or delete lifecycle rules, set bucket quota, purge incomplete uploads, delete an empty bucket). Always use this skill for "minio health", "why is my object storage full", "which bucket is biggest", "is any bucket public / anonymous access", "versioning / noncurrent versions piling up", "incomplete multipart uploads", "lifecycle / ILM rules", "buc

What it does

Use this skill whenever the user needs to operate or diagnose MinIO object storage — explain why the cluster is filling up or refusing writes (capacity_rca), find publicly exposed buckets and hygiene gaps (bucket_exposure_audit), find storage that lifecycle/ILM should be reclaiming but isn't, including noncurrent versions and incomplete multipart uploads (lifecycle_gap_analysis), check heal backlog and erasure-set write-quorum risk (healing_health), read service health / cluster status / per-bucket config (policy, versioning, lifecycle, encryption, quota, tags) — plus governed writes (set or delete bucket policy, enable/suspend versioning, set or delete lifecycle rules, set bucket quota, purge incomplete uploads, delete an empty bucket). Always use this skill for "minio health", "why is my object storage full", "which bucket is biggest", "is any bucket public / anonymous access", "versioning / noncurrent versions piling up", "incomplete multipart uploads", "lifecycle / ILM rules", "bucket quota", "erasure set / drive failure tolerance", "healing backlog", or "delete a bucket safely" when the context is a MinIO deployment. Do NOT use when the target is not MinIO — for Ceph/RGW use ceph-aiops; for TrueNAS storage use truenas-aiops; for a hypervisor, backup product, container cluster, or network device route to the appropriate other AIops-tools skill (negative routing hint only). Common MinIO ops with a built-in governance harness (audit, policy, token budget, undo, risk-tiers).

The skill document

MinIO AIops

Disclaimer: Community-maintained open-source project, not affiliated with, endorsed by, or sponsored by MinIO, Inc. or any storage vendor. Product and trademark names belong to their owners. Source at github.com/AIops-tools/MinIO-AIops under the MIT license.

Governed MinIO object-storage operations — 48 MCP tools, every one wrapped with the bundled @governed_tool harness: a local unified audit log under ~/.minio-aiops/, a token/runaway budget guard, undo-token recording, and a descriptive risk tier on every audit row. The secret key is stored encrypted (~/.minio-aiops/secrets.enc, Fernet + scrypt) — never plaintext on disk. Six flagship analyses turn raw state into plain-language cause + suggested action: capacity_rca, bucket_exposure_audit, lifecycle_gap_analysis, healing_health, diagnose_retention_gaps, diagnose_iam_exposure.

Standalone: the governance harness is bundled in the package (minio_aiops.governance) — minio-aiops has no external skill-family dependency. Verification status and the live-run checklist are in docs/VERIFICATION.md.

Authorization is not this tool's job: whether a write is permitted is the agent's judgement or the permission of the access key you connect with (a read-only IAM policy makes writes fail at the server). There is no read-only switch, policy file, or approval gate — the guarantee is that every call is audited. Driving this with a smaller / local model? See references/agent-guardrails.md.

What This Skill Does

GroupToolsCountRead or Write
Healthhealth_live, health_ready, health_cluster, cluster_status, fleet_overview55 read
Capacitycapacity_rca (flagship), usage_by_bucket22 read
Healinghealing_health (flagship), drive_status, node_status33 read
Exposure / ILMbucket_exposure_audit (flagship), lifecycle_gap_analysis (flagship)22 read
Bucketsbucket_ls, bucket_info, bucket_policy_get, bucket_lifecycle_get, bucket_versioning_get, bucket_quota_get, object_ls, incomplete_uploads_ls, server_info99 read
Writesset_bucket_policy, delete_bucket_policy, set_versioning, set_lifecycle, delete_lifecycle, set_bucket_quota, bucket_delete, remove_incomplete_uploads88 write
Object lock (WORM)bucket_lock_config, object_lock_status, diagnose_retention_gaps (flagship)33 read
bucket_create, set_default_retention, clear_default_retention, set_legal_hold, set_object_retention55 write
IAMiam_users, iam_groups, iam_policies, diagnose_iam_exposure (flagship)44 read
create_user, set_user_status, remove_user, attach_user_policy, detach_user_policy55 write
Undoundo_list, undo_apply2read + replay

Totals: 48 tools — 28 read, 18 write, 2 undo. The MCP server exposes all 48; the CLI is a convenience subset.

Quick Install

uv tool install minio-aiops
minio-aiops init       # interactive wizard: endpoint + access key + encrypted secret key
minio-aiops doctor

When to Use This Skill

  • "Storage is filling up / writes are failing"capacity_rca (capacity vs used, offline drives/nodes, hotspots — cause + action per finding), then usage_by_bucket for the biggest consumers
  • "Is anything exposed?"bucket_exposure_audit (ranked: public read/write policies, missing encryption, versioning off, no lifecycle)
  • "Where did my space go?"lifecycle_gap_analysis (unbounded noncurrent versions, incomplete multipart uploads, reclaimable estimate) then remove_incomplete_uploads + set_lifecycle to fix it for good
  • "How many more drives can fail?"healing_health (per-erasure-set online drives vs write quorum, heal backlog/errors)
  • One-shot triage (fleet_overview / minio-aiops overview): health + capacity headline + exposure headline
  • Per-bucket questions: bucket_info (policy/versioning/lifecycle/encryption/quota/tags in one answer)
  • Safely change policy/versioning/lifecycle/quota (reversible, undo recorded) or delete an empty bucket (governed, dry-run + double confirm)

Do NOT use when the target is not MinIO — for Ceph/RGW use ceph-aiops; for TrueNAS use truenas-aiops; for a hypervisor, backup product, container cluster, or network device route to the appropriate other AIops-tools skill.

If the user wants…Use
MinIO: capacity RCA, bucket exposure, ILM gaps, healing, bucket writesminio-aiops (this skill)
Ceph/RGW storageceph-aiops
TrueNAS storage appliancestruenas-aiops
Any other target (hypervisor, backup, cluster, network)the appropriate other AIops-tools skill

Common Workflows

Each recipe starts from an RCA read and ends in a governed, reversible write. Every write step accepts --dry-run; irreversible ones also double-confirm.

1. "Backups are failing — the cluster says it's out of space"

  1. minio-aiops overview → one-shot triage: health + capacity headline + exposure headline.
  2. minio-aiops capacity rca → ranked findings with cause + action (CLUSTER_NEARFULL, DRIVES_OFFLINE, DRIVE_HOTSPOT, …). Note which finding is actually driving the fill.
  3. minio-aiops capacity usage → the biggest buckets, largest first, so you know where the bytes live.
  4. minio-aiops bucket ilm-gap → how much of that is reclaimable: unbounded noncurrent versions and abandoned multipart uploads, with an estimate.
  5. Reclaim the abandoned uploads: minio-aiops bucket purge-uploads --older-than-days 7 --dry-run, then re-run without --dry-run (double confirm — this one is irreversible, only uploads older than the window are aborted).
  6. Cap version growth: minio-aiops bucket lifecycle-set --noncurrent-days 30 (reversible — the prior lifecycle config is captured). Abandoned uploads have no server-side rule — MinIO does not honour a lifecycle abort-incomplete rule — so re-run purge-uploads periodically instead.
  7. minio-aiops capacity rca again to confirm the finding cleared.

Failure branch: if capacity rca reports DRIVES_OFFLINE rather than genuine data growth, stop — do not delete anything. The space is not gone, it is unavailable. Go to recipe 3 and restore drive/erasure-set health first; purging data under a degraded erasure set removes redundancy you may need.

2. "Someone says one of our buckets is readable from the internet"

  1. minio-aiops bucket audit → ranked exposure findings, riskiest first (PUBLIC_WRITE_POLICY, PUBLIC_READ_POLICY, missing encryption, versioning off, no lifecycle).
  2. minio-aiops bucket info → the full per-bucket picture (policy, versioning, lifecycle, encryption, quota, tags) so you fix the right thing.
  3. Decide the fix. To remove anonymous access entirely: minio-aiops bucket policy-set --file restricted-policy.json --dry-run, then re-run for real. To drop the policy altogether, use the delete_bucket_policy MCP tool. Both are reversible — the prior policy JSON is captured.
  4. minio-aiops undo list → confirm an undo token was recorded for the change you just made.
  5. minio-aiops bucket audit → confirm the finding is gone.

Failure branch: if the write is refused by the server with an access-denied error, the access key you connected with lacks permission for that operation — the tool does not gate the write, the key does. Connect with a key whose IAM policy allows it (or ask whoever owns the key). If the new policy breaks a legitimate consumer, minio-aiops undo apply restores the exact prior policy document.

3. "A drive died — how many more failures can we take?"

  1. minio-aiops health check and minio-aiops health status → is the cluster serving reads and writes at all right now?
  2. minio-aiops heal status → per erasure set: online drives vs write quorum, failureToleranceRemaining, healing drives, heal backlog and errors.
  3. minio-aiops heal drives → which specific drives are offline or healing.
  4. minio-aiops heal nodes → whether the failures cluster on one node (a node problem, not a drive problem).
  5. If WRITE_QUORUM_AT_EDGE appears, the next failure stops writes: replace drives before any maintenance, and re-run heal status until the backlog drains.

Failure branch: if the heal backlog is not shrinking between runs, do not start more maintenance. Check heal nodes for an offline node first — a down node makes its drives look like many simultaneous drive failures, and replacing hardware will not fix it.

4. "The auditor asked whether our retained data is actually protected"

  1. minio-aiops lock gaps → ranked WORM findings across every bucket. The two that matter most: LOCK_ENABLED_NO_DEFAULT_RETENTION (the bucket advertises object lock but retains nothing unless each upload asks) and LIFECYCLE_CANNOT_EXPIRE_UNDER_RETENTION (an expiry rule that retention outlives, so the capacity never returns — both day counts are in the finding).
  2. minio-aiops lock config → whether object lock is enabled at all. objectLockEnabled: false is terminal: S3 accepts the flag only at bucket creation, so the answer is a new bucket plus a migration, not a setting.
  3. minio-aiops lock status → for a specific object: retention mode, days remaining, legal hold, and protection.versionDestroyable with what is blocking it. Note deleteMarkerStillPossible: object lock protects the bytes, not the key's visibility.
  4. Close the gap for future uploads: minio-aiops lock default-set GOVERNANCE --days 365 --dry-run, then for real (reversible — the prior rule is captured).
  5. minio-aiops lock gaps again → confirm the finding cleared, and check whether step 4 introduced the lifecycle contradiction from step 1.

Failure branch: lock default-set refused with "does not have object lock enabled" means the bucket can never be made WORM in place — create one with minio-aiops lock bucket-create --object-lock and migrate. If the auditor requires retention nobody can lift, that is COMPLIANCE, not GOVERNANCE — and it is genuinely permanent: verified on a live server, root with --bypass could not clear it, downgrade it, or delete the version. set_object_retention therefore records no undo token, refuses any call that would shorten retention already in force, and requires acknowledge_irreversible=True. Use GOVERNANCE unless permanence is the actual requirement.

5. "Decommission a retired bucket"

  1. minio-aiops bucket ls → confirm the exact bucket name.
  2. minio-aiops bucket info → verify it is genuinely retired (check versioning, lifecycle and quota, not just the object count).
  3. minio-aiops bucket uploads → surface incomplete multipart uploads, which keep a bucket non-empty even when it looks empty.
  4. minio-aiops bucket purge-uploads --older-than-days 7 if any remain (dry-run first, double confirm).
  5. minio-aiops bucket delete --dry-run → shows the API call, changes nothing.
  6. Re-run without --dry-run: double confirm, high risk. Execution re-checks emptiness (versions and delete markers included) and refuses otherwise — this tool never mass-deletes data.

Failure branch: if the delete is refused as non-empty, that is the guard doing its job — the bucket still holds objects, noncurrent versions, delete markers, or incomplete uploads. Go back to step 3, and never work around the guard by deleting data out-of-band; this tool deliberately has no mass-delete path.

Governance & Safety

  • The skill delivers reads and writes and records them; it does not decide whether a write is permitted — that is the agent's judgement or the permission of the access key you connect with (a read-only IAM policy makes writes fail at the server). There is no read-only switch, policy file, or approval gate.
  • Audit is the guarantee: every tool — MCP and CLI alike — is audited to ~/.minio-aiops/audit.db (relocatable via MINIO_AIOPS_HOME). MINIO_AUDIT_APPROVED_BY / MINIO_AUDIT_RATIONALE are optional annotations recorded when set, never required.
  • The declared risk_level (bucket_delete is high) is carried into the audit row as a descriptive tier — a label for the reviewer, not a gate.
  • Destructive writes support --dry-run and double confirmation at the CLI.
  • Reversible writes record an inverse descriptor capturing the real prior state (policy JSON, lifecycle XML, versioning state, quota).

References

  • references/capabilities.md — full tool → API-surface → returns reference
  • references/cli-reference.md — CLI command reference
  • references/setup-guide.md — onboarding, credentials, and connectivity

Related skills

Use this skill whenever the user needs to operate or diagnose a Ceph cluster via its ceph-mgr Dashboard REST API — decode a HEALTH_WARN/ERR state into cause + action (cluster_health), read the cluster status, inspect OSDs (tree/df/perf), placement groups (summary/stuck/scrub), pools (list/usable capacity), RBD images and snapshots, CephFS/MDS and RGW status, monitors/managers, slow ops and capacity forecast — plus governed writes (set cluster flags, reweight/mark-in/mark-out/purge OSDs, trigger scrubs, set pool quota/pg_num/autoscale/size, create/delete pools, create/delete RBD images and snapshots, throttle recovery/backfill). Always use this skill for "ceph health", "what does this HEALTH_WARN mean", "PG_DEGRADED / OSD_NEARFULL / SLOW_OPS / MON_DOWN", "ceph -s", "which OSD is most full", "drain an OSD", "purge an OSD", "stuck PGs", "overdue scrub", "pool usable capacity", "set pool size / quota", "rebalance is too slow / throttle backfill", "RBD image or snapshot", "MDS behind on tri

Use this skill whenever the user needs to operate a GPU inference cluster — vLLM (OpenAI API + Prometheus /metrics) and Ray Serve / Ray Jobs (Ray dashboard), plus the single-process serving engines SGLang and TGI (Text Generation Inference): a one-shot cluster overview (deployments + total replicas + queue backpressure), request metrics (TTFT / TPOT / e2e latency + token totals), queue depth, KV-cache stats (utilisation, prefix-cache hit rate, preemptions), the flagship latency root-cause analysis (diagnose_latency_spike / diagnose_engine_latency) and low-utilisation RCA, engine-agnostic health + running-model inventory across vLLM/SGLang/TGI, Ray Serve autoscaling and scaling (scale up/down, scale-to-zero, drain a replica), LoRA load/unload, base-model hot-swap, deploy/undeploy/redeploy, prefix-aware routing, GPU utilisation, Ray jobs, and cost per million tokens. Always use this skill for "why is inference slow", "TTFT spike", "latency spike", "GPU underutilised", "scale down the dep

Use this skill whenever the user needs to operate a Kubernetes cluster — list/inspect pods, deployments, statefulsets, daemonsets, replicasets, jobs, cronjobs, services, ingresses, endpoints, configmaps, secrets (names/keys only), PVCs/PVs/storageclasses, nodes, namespaces, and events; read pod logs; describe pods/nodes; pod/node top (metrics); read-only diagnostics / RCA (pod-health, workload-readiness); scale deployments/statefulsets; rollout status/history/undo/pause/resume and set image; delete pods/deployments/jobs; create/delete namespaces; and cordon/uncordon/drain nodes. Works with any kubeconfig-reachable cluster (standard Kubernetes, k3s, EKS, GKE, AKS). Always use this skill for "list k8s pods", "scale deployment", "kubernetes pod logs", "describe pod", "why is my pod crashing", "diagnose pods", "which deployments are unhealthy", "rollout undo", "set image", "top pods", "drain node", "cordon node", "restart deployment", "k3s", or "kubectl"-style tasks when the context is exp

1 installs1 stars

Use this skill whenever the user needs to operate TrueNAS SCALE storage — a one-shot health overview, system info, read-only diagnostics / RCA (pool health, alerts & dataset capacity), inspect ZFS pools (list/get/status, capacity, scrub status, start a scrub), datasets (list/get/create), snapshots (list/create/delete), physical disks and S.M.A.R.T. self-test results, system alerts, services (list/restart), and replication / cloud-sync tasks. Always use this skill for "list truenas pools", "truenas dataset", "create zfs snapshot", "start a scrub", "diagnose truenas pool health", "why is my pool degraded", "truenas disk health", "truenas smart test", "truenas alerts", "restart truenas service", or "truenas replication" when the context is explicitly TrueNAS / TrueNAS SCALE / a ZFS NAS appliance. Do NOT use when the target is not a TrueNAS SCALE appliance — other NAS/storage products, backup software, hypervisor VM lifecycle, container clusters, and network devices are out of scope (negat

1 installs

Use this skill whenever the user needs to operate a single container host through the Docker Engine API, Portainer, or Podman — a one-shot host overview; container reads (list/inspect, logs tail, CPU/memory stats, top processes, restart summary); image reads (list, inspect with history, dangling, disk usage); volume reads (list, inspect, dangling); network reads (list, inspect); system reads (info, version, df disk-usage, recent events); Portainer stacks + endpoints; Compose-project rollups (list_compose_stacks, docker+podman); Podman pods (list_pods, podman-only); three flagship analyses — restart-loop RCA (crash-looping containers + cause/action), resource-pressure analysis (CPU/memory vs limits), and image & volume bloat (prune candidates + reclaimable bytes); and eight guarded writes (restart/stop/start/remove a container, prune images/volumes, update resource limits, recreate a Portainer stack). Always use this skill for "Docker host overview", "which containers are crash-looping"

1 installs

Use this skill whenever the user needs to operate or troubleshoot a PostgreSQL server/cluster as a DBA — a one-shot cluster health overview; server reads (version/uptime, settings, extensions, databases, roles); activity (sessions, idle-in-transaction, long-running queries, locks); query stats (pg_stat_statements top-N, EXPLAIN a statement); index health (unused indexes, missing-index hints, bloat, invalid/duplicate); table health (sizes, dead-tuple bloat, autovacuum status); replication (standby lag, replication slots, WAL); three flagship analyses — slow-query RCA (worst pg_stat_statements entry + EXPLAIN → cause/action), bloat & vacuum analysis (dead tuples + autovacuum lag → recommendation), and blocking lock-chain RCA (build the wait-for tree, name the root blocker); and guarded writes (terminate a backend, cancel a query, VACUUM/ANALYZE, create/drop an index, REINDEX, ALTER SYSTEM SET a parameter, reset query stats). Always use this skill for "postgres health check", "why is this

2 installs