[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openshift-investigate-alert":3,"mdc-hqmzx6-key":38,"related-org-openshift-investigate-alert":1155,"related-repo-openshift-investigate-alert":1281},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":33,"sourceUrl":36,"mdContent":37},"investigate-alert","investigate and remediate OpenShift alerts","Investigate one or more firing OpenShift alerts to determine root cause and recommend remediation options. Use when the user provides alert names or a set of firing alerts. Not for cluster setup, configuration how-tos, or writing alerting rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openshift","OpenShift (Red Hat)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenshift.png",[12,16,19,22,24],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Alerting","alerting",{"name":20,"slug":21,"type":15},"Monitoring","monitoring",{"name":23,"slug":8,"type":15},"OpenShift",{"name":25,"slug":26,"type":15},"Debugging","debugging",5,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Fagentic-skills","2026-08-06T06:09:22.403268",null,16,[],{"repoUrl":28,"stars":27,"forks":31,"topics":34,"description":35},[],"OpenShift  Container Platform skills for  AI agents and OpenShift","https:\u002F\u002Fgithub.com\u002Fopenshift\u002Fagentic-skills\u002Ftree\u002FHEAD\u002Fcluster-troubleshoot\u002Finvestigate-alert","---\nname: investigate-alert\ndescription: Investigate one or more firing OpenShift alerts to determine root cause and recommend remediation options. Use when the user provides alert names or a set of firing alerts. Not for cluster setup, configuration how-tos, or writing alerting rules.\n---\n\n# Environment\n\n- Platform: OpenShift Container Platform (OCP). Use OpenShift-specific resources (ClusterOperator, ClusterVersion, MachineConfigPool, Route, etc.) alongside standard Kubernetes ones.\n- You run commands against the live cluster.\n- Available CLIs: oc, kubectl, jq, wget, openssl, skopeo, python3, dig, nslookup, ip, ss, tcpdump, strace\n- Writable directories: \u002Fhome\u002Fagent, \u002Ftmp\u002Fagent-workspace. The root filesystem is read-only.\n\n# Rules\n\n- Verify every claim with evidence from command output. Provide exact resource names, namespaces, timestamps, and error messages.\n- If multiple causes exist, list them numbered with supporting evidence.\n- If inconclusive, say so and suggest what additional access or data would help narrow it down. Never fabricate information.\n- Stay focused on the reported alerts; don't surface unrelated errors.\n- The remediation options must address only the root cause of the alerts being analyzed. Never include secondary issues, unrelated findings, or general recommendations.\n- No URLs unless from command output or provided context.\n- List actual resources before inspecting them; never guess pod names, use label selectors or owner references.\n- Sample up to 3 representative pods per workload, not all.\n- All `tools\u002F` scripts output JSON except `prometheus-setup.sh` (shell export commands for `eval`). Use `jq` for further filtering when needed.\n- When running raw `oc` commands, use `-o json | jq` for structured data extraction.\n- Do not repeat the same command with the same arguments.\n- Do not ask the user to run a command; gather the information yourself.\n- Be highly concise. Evidence-backed conclusions, no filler.\n\n# Tools\n\nThe `tools\u002F` directory contains diagnostic scripts. All output JSON to stdout and return structured error objects on failure, except `prometheus-setup.sh` which prints shell export commands for `eval`. Run `eval $(bash tools\u002Fprometheus-setup.sh)` once per session before using Prometheus tools.\n\n## Prometheus\n\n- `bash tools\u002Fprometheus-setup.sh` — Set TOKEN and THANOS_URL\n- `bash tools\u002Fquery-alert.sh \u003Calert_name>` — Firing instances of a named alert with full label sets\n- `bash tools\u002Ffetch-alert-rule.sh \u003Calert_name>` — Alert PromQL expression, thresholds, annotations\n- `bash tools\u002Fprometheus-query.sh '\u003Cpromql>'` — Instant PromQL query\n- `bash tools\u002Fprometheus-query-range.sh '\u003Cpromql>' [duration] [step]` — Range query (default: 1h, 60s step)\n- `bash tools\u002Fdiscover-metrics.sh \u003Cpattern>` — Search metric names by pattern\n- `bash tools\u002Fget-firing-alerts.sh [filter]` — All firing alerts, optionally filtered by name\n\n## Cluster\n\n- `bash tools\u002Fdiagnose-pod.sh \u003Cname-or-selector> [namespace] [--logs]` — Pod status, conditions, events, logs. Selectors (containing `=`) sample up to 3 pods.\n- `bash tools\u002Fdiagnose-node.sh [node_name]` — Node conditions, capacity, taints. Without a name: all nodes summary.\n- `bash tools\u002Fdiagnose-operator.sh [operator_name]` — ClusterOperator health. Without a name: all operators summary.\n- `bash tools\u002Fdiagnose-workload.sh \u003Cname> [namespace] [kind]` — Deployment\u002FStatefulSet\u002FDaemonSet status, replicas, rollout history. Auto-detects kind.\n- `bash tools\u002Fget-events.sh [namespace] [minutes]` — Events sorted by time, last N minutes (default: 60). Use `--all` for cluster-wide.\n- `bash tools\u002Fcheck-recent-changes.sh [namespace] [minutes]` — Recent rollouts, image pulls, active rollouts.\n\n# Investigation Protocol\n\nThe protocol has two phases: **collect evidence first**, then **analyze**. Do not jump to conclusions or propose remediation until you have completed the collection phase.\n\n## Phase 1 — Collect evidence\n\n### Step 1 — Scope the blast radius\n\nDetermine the scope of the alerts: is it one pod, one node, one namespace, or cluster-wide? This determines which layer to start from and which tools to prioritize.\n\n### Step 2 — Set up and query the alerts\n\nConfigure Prometheus access:\n```bash\neval $(bash tools\u002Fprometheus-setup.sh)\n```\n\nFor each alert provided:\n```bash\nbash tools\u002Fquery-alert.sh \u003CALERT_NAME>\nbash tools\u002Ffetch-alert-rule.sh \u003CALERT_NAME>\n```\nExtract the full label set (namespace, pod, node, service, severity, etc.) from firing instances. Even if an alert is NOT firing, fetch the rule; the PromQL expression and labels contain diagnostic information.\n\nIf the rule is found, check the annotations for `runbook_url`. If present, extract the URL and follow the runbook steps as part of the analysis.\n\nRun each alert's PromQL expression to see current and recent values:\n```bash\nbash tools\u002Fprometheus-query.sh '\u003Cexpr>'\nbash tools\u002Fprometheus-query-range.sh '\u003Cexpr>'\n```\n\n### Step 3 — Collect workload state and logs\n\nUsing the namespaces and resources identified from the alert labels, list all deployments, statefulsets, and daemonsets in the affected namespaces. Then for **every** workload, collect its status and logs:\n```bash\nbash tools\u002Fdiagnose-workload.sh \u003Cname> \u003Cnamespace>\nbash tools\u002Fdiagnose-pod.sh \u003Cname-or-selector> \u003Cnamespace> --logs\n```\nThis is mandatory. Do not skip workloads that appear healthy. A Running pod with no visible issues can still be the root cause if it is producing errors internally.\n\n### Step 4 — Collect events and recent changes\n\n```bash\nbash tools\u002Fget-events.sh \u003Cnamespace>\nbash tools\u002Fcheck-recent-changes.sh \u003Cnamespace>\n```\n\nThe scripts cover rollouts and image pulls. Also check for: config\u002Fsecret edits, HPA scaling events, operator upgrades, node drains, and MachineConfig updates using `oc rollout history`, `oc describe`, and events sorted by time.\n\n### Step 5 — Collect all firing alerts for correlation\n\n```bash\nbash tools\u002Fget-firing-alerts.sh\n```\n\n## Phase 2 — Analyze and diagnose\n\n### Step 6 — Correlate alerts\n\nGroup all firing alerts by shared labels to find the common root cause:\n- Alerts sharing the same **node** → likely a node-level issue (investigate the node first)\n- Alerts sharing the same **namespace** but on different nodes → likely an application or config issue\n- Alerts sharing the same **job** or **service** → dependency or networking issue\n- Alerts across multiple namespaces and nodes → cluster-wide issue (check operators, control plane, networking)\n\nPrioritize investigation from infrastructure inward: node → operator → workload → pod.\n\n### Step 7 — Trace causality chains\n\nUse the evidence collected in phase 1 to trace the chain from symptom to root cause. If resource A fails because of B, investigate B. At each link, check status conditions and events. Common chains in OpenShift:\n- Pod pending → pod conditions (PodScheduled, Unschedulable) and events → node pressure, unschedulable nodes, resource quota, or PVC not bound\n- Pod crash-looping → container statuses (terminated reason: OOMKilled, Error) and logs → OOMKilled (check limits vs. actual usage), application error, misconfigured probes\n- Service unreachable → endpoints\u002Fendpointslices → no endpoints → pods not ready → readiness probe and pod conditions\n- Operator degraded → `bash tools\u002Fdiagnose-operator.sh \u003Cname>` (check Available, Degraded, Progressing with messages) → operand pod failing → node issue or config error\n- Node NotReady → node conditions (Ready, MemoryPressure, DiskPressure, PIDPressure) and events → kubelet issues, certificate expired, MCO update stuck, or kernel panic\n\nUse the range query data from step 2 and the recent changes from step 4 to identify **when** the problem started and what changed around that time.\n\nAfter identifying a root cause, keep digging: collect exact names, versions, and labels, and check for additional contributing factors before concluding.\n\n### Step 8 — Recommend remediation options\n\nBased on the collected evidence, propose remediation options. Provide the exact commands to run. When multiple options exist, list them from least to most disruptive and note whether each action is reversible. If the root cause is unclear, state what is known, suggest mitigations to reduce impact, and identify what additional data would narrow the diagnosis.\n\n**RBAC requirements for remediation:** the agent's ServiceAccount has **read-only** permissions (`cluster-reader` + `cluster-monitoring-view`). Any proposed remediation command (patch, delete, scale, rollout restart, etc.) requires additional RBAC that the agent does not have. For every proposed option, you **must** include a complete RBAC section listing:\n- The exact API group, resource, and verbs required (e.g., `apps` \u002F `deployments` \u002F `patch`)\n- The namespace scope (specific namespace or cluster-wide)\n- A ready-to-apply Role or ClusterRole YAML snippet the admin can use to grant the permissions\n\nThis is critical; without this information the admin cannot safely execute the proposed remediation.\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,52,77,83,200,206,241,248,328,334,419,425,445,451,458,463,469,474,518,523,592,597,610,615,673,679,691,797,802,808,871,892,898,917,923,929,934,983,988,994,999,1035,1047,1052,1058,1063,1103,1144,1149],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"environment",[49],{"type":50,"value":51},"text","Environment",{"type":44,"tag":53,"props":54,"children":55},"ul",{},[56,62,67,72],{"type":44,"tag":57,"props":58,"children":59},"li",{},[60],{"type":50,"value":61},"Platform: OpenShift Container Platform (OCP). Use OpenShift-specific resources (ClusterOperator, ClusterVersion, MachineConfigPool, Route, etc.) alongside standard Kubernetes ones.",{"type":44,"tag":57,"props":63,"children":64},{},[65],{"type":50,"value":66},"You run commands against the live cluster.",{"type":44,"tag":57,"props":68,"children":69},{},[70],{"type":50,"value":71},"Available CLIs: oc, kubectl, jq, wget, openssl, skopeo, python3, dig, nslookup, ip, ss, tcpdump, strace",{"type":44,"tag":57,"props":73,"children":74},{},[75],{"type":50,"value":76},"Writable directories: \u002Fhome\u002Fagent, \u002Ftmp\u002Fagent-workspace. The root filesystem is read-only.",{"type":44,"tag":45,"props":78,"children":80},{"id":79},"rules",[81],{"type":50,"value":82},"Rules",{"type":44,"tag":53,"props":84,"children":85},{},[86,91,96,101,106,111,116,121,126,164,185,190,195],{"type":44,"tag":57,"props":87,"children":88},{},[89],{"type":50,"value":90},"Verify every claim with evidence from command output. Provide exact resource names, namespaces, timestamps, and error messages.",{"type":44,"tag":57,"props":92,"children":93},{},[94],{"type":50,"value":95},"If multiple causes exist, list them numbered with supporting evidence.",{"type":44,"tag":57,"props":97,"children":98},{},[99],{"type":50,"value":100},"If inconclusive, say so and suggest what additional access or data would help narrow it down. Never fabricate information.",{"type":44,"tag":57,"props":102,"children":103},{},[104],{"type":50,"value":105},"Stay focused on the reported alerts; don't surface unrelated errors.",{"type":44,"tag":57,"props":107,"children":108},{},[109],{"type":50,"value":110},"The remediation options must address only the root cause of the alerts being analyzed. Never include secondary issues, unrelated findings, or general recommendations.",{"type":44,"tag":57,"props":112,"children":113},{},[114],{"type":50,"value":115},"No URLs unless from command output or provided context.",{"type":44,"tag":57,"props":117,"children":118},{},[119],{"type":50,"value":120},"List actual resources before inspecting them; never guess pod names, use label selectors or owner references.",{"type":44,"tag":57,"props":122,"children":123},{},[124],{"type":50,"value":125},"Sample up to 3 representative pods per workload, not all.",{"type":44,"tag":57,"props":127,"children":128},{},[129,131,138,140,146,148,154,156,162],{"type":50,"value":130},"All ",{"type":44,"tag":132,"props":133,"children":135},"code",{"className":134},[],[136],{"type":50,"value":137},"tools\u002F",{"type":50,"value":139}," scripts output JSON except ",{"type":44,"tag":132,"props":141,"children":143},{"className":142},[],[144],{"type":50,"value":145},"prometheus-setup.sh",{"type":50,"value":147}," (shell export commands for ",{"type":44,"tag":132,"props":149,"children":151},{"className":150},[],[152],{"type":50,"value":153},"eval",{"type":50,"value":155},"). Use ",{"type":44,"tag":132,"props":157,"children":159},{"className":158},[],[160],{"type":50,"value":161},"jq",{"type":50,"value":163}," for further filtering when needed.",{"type":44,"tag":57,"props":165,"children":166},{},[167,169,175,177,183],{"type":50,"value":168},"When running raw ",{"type":44,"tag":132,"props":170,"children":172},{"className":171},[],[173],{"type":50,"value":174},"oc",{"type":50,"value":176}," commands, use ",{"type":44,"tag":132,"props":178,"children":180},{"className":179},[],[181],{"type":50,"value":182},"-o json | jq",{"type":50,"value":184}," for structured data extraction.",{"type":44,"tag":57,"props":186,"children":187},{},[188],{"type":50,"value":189},"Do not repeat the same command with the same arguments.",{"type":44,"tag":57,"props":191,"children":192},{},[193],{"type":50,"value":194},"Do not ask the user to run a command; gather the information yourself.",{"type":44,"tag":57,"props":196,"children":197},{},[198],{"type":50,"value":199},"Be highly concise. Evidence-backed conclusions, no filler.",{"type":44,"tag":45,"props":201,"children":203},{"id":202},"tools",[204],{"type":50,"value":205},"Tools",{"type":44,"tag":207,"props":208,"children":209},"p",{},[210,212,217,219,224,226,231,233,239],{"type":50,"value":211},"The ",{"type":44,"tag":132,"props":213,"children":215},{"className":214},[],[216],{"type":50,"value":137},{"type":50,"value":218}," directory contains diagnostic scripts. All output JSON to stdout and return structured error objects on failure, except ",{"type":44,"tag":132,"props":220,"children":222},{"className":221},[],[223],{"type":50,"value":145},{"type":50,"value":225}," which prints shell export commands for ",{"type":44,"tag":132,"props":227,"children":229},{"className":228},[],[230],{"type":50,"value":153},{"type":50,"value":232},". Run ",{"type":44,"tag":132,"props":234,"children":236},{"className":235},[],[237],{"type":50,"value":238},"eval $(bash tools\u002Fprometheus-setup.sh)",{"type":50,"value":240}," once per session before using Prometheus tools.",{"type":44,"tag":242,"props":243,"children":245},"h2",{"id":244},"prometheus",[246],{"type":50,"value":247},"Prometheus",{"type":44,"tag":53,"props":249,"children":250},{},[251,262,273,284,295,306,317],{"type":44,"tag":57,"props":252,"children":253},{},[254,260],{"type":44,"tag":132,"props":255,"children":257},{"className":256},[],[258],{"type":50,"value":259},"bash tools\u002Fprometheus-setup.sh",{"type":50,"value":261}," — Set TOKEN and THANOS_URL",{"type":44,"tag":57,"props":263,"children":264},{},[265,271],{"type":44,"tag":132,"props":266,"children":268},{"className":267},[],[269],{"type":50,"value":270},"bash tools\u002Fquery-alert.sh \u003Calert_name>",{"type":50,"value":272}," — Firing instances of a named alert with full label sets",{"type":44,"tag":57,"props":274,"children":275},{},[276,282],{"type":44,"tag":132,"props":277,"children":279},{"className":278},[],[280],{"type":50,"value":281},"bash tools\u002Ffetch-alert-rule.sh \u003Calert_name>",{"type":50,"value":283}," — Alert PromQL expression, thresholds, annotations",{"type":44,"tag":57,"props":285,"children":286},{},[287,293],{"type":44,"tag":132,"props":288,"children":290},{"className":289},[],[291],{"type":50,"value":292},"bash tools\u002Fprometheus-query.sh '\u003Cpromql>'",{"type":50,"value":294}," — Instant PromQL query",{"type":44,"tag":57,"props":296,"children":297},{},[298,304],{"type":44,"tag":132,"props":299,"children":301},{"className":300},[],[302],{"type":50,"value":303},"bash tools\u002Fprometheus-query-range.sh '\u003Cpromql>' [duration] [step]",{"type":50,"value":305}," — Range query (default: 1h, 60s step)",{"type":44,"tag":57,"props":307,"children":308},{},[309,315],{"type":44,"tag":132,"props":310,"children":312},{"className":311},[],[313],{"type":50,"value":314},"bash tools\u002Fdiscover-metrics.sh \u003Cpattern>",{"type":50,"value":316}," — Search metric names by pattern",{"type":44,"tag":57,"props":318,"children":319},{},[320,326],{"type":44,"tag":132,"props":321,"children":323},{"className":322},[],[324],{"type":50,"value":325},"bash tools\u002Fget-firing-alerts.sh [filter]",{"type":50,"value":327}," — All firing alerts, optionally filtered by name",{"type":44,"tag":242,"props":329,"children":331},{"id":330},"cluster",[332],{"type":50,"value":333},"Cluster",{"type":44,"tag":53,"props":335,"children":336},{},[337,356,367,378,389,408],{"type":44,"tag":57,"props":338,"children":339},{},[340,346,348,354],{"type":44,"tag":132,"props":341,"children":343},{"className":342},[],[344],{"type":50,"value":345},"bash tools\u002Fdiagnose-pod.sh \u003Cname-or-selector> [namespace] [--logs]",{"type":50,"value":347}," — Pod status, conditions, events, logs. Selectors (containing ",{"type":44,"tag":132,"props":349,"children":351},{"className":350},[],[352],{"type":50,"value":353},"=",{"type":50,"value":355},") sample up to 3 pods.",{"type":44,"tag":57,"props":357,"children":358},{},[359,365],{"type":44,"tag":132,"props":360,"children":362},{"className":361},[],[363],{"type":50,"value":364},"bash tools\u002Fdiagnose-node.sh [node_name]",{"type":50,"value":366}," — Node conditions, capacity, taints. Without a name: all nodes summary.",{"type":44,"tag":57,"props":368,"children":369},{},[370,376],{"type":44,"tag":132,"props":371,"children":373},{"className":372},[],[374],{"type":50,"value":375},"bash tools\u002Fdiagnose-operator.sh [operator_name]",{"type":50,"value":377}," — ClusterOperator health. Without a name: all operators summary.",{"type":44,"tag":57,"props":379,"children":380},{},[381,387],{"type":44,"tag":132,"props":382,"children":384},{"className":383},[],[385],{"type":50,"value":386},"bash tools\u002Fdiagnose-workload.sh \u003Cname> [namespace] [kind]",{"type":50,"value":388}," — Deployment\u002FStatefulSet\u002FDaemonSet status, replicas, rollout history. Auto-detects kind.",{"type":44,"tag":57,"props":390,"children":391},{},[392,398,400,406],{"type":44,"tag":132,"props":393,"children":395},{"className":394},[],[396],{"type":50,"value":397},"bash tools\u002Fget-events.sh [namespace] [minutes]",{"type":50,"value":399}," — Events sorted by time, last N minutes (default: 60). Use ",{"type":44,"tag":132,"props":401,"children":403},{"className":402},[],[404],{"type":50,"value":405},"--all",{"type":50,"value":407}," for cluster-wide.",{"type":44,"tag":57,"props":409,"children":410},{},[411,417],{"type":44,"tag":132,"props":412,"children":414},{"className":413},[],[415],{"type":50,"value":416},"bash tools\u002Fcheck-recent-changes.sh [namespace] [minutes]",{"type":50,"value":418}," — Recent rollouts, image pulls, active rollouts.",{"type":44,"tag":45,"props":420,"children":422},{"id":421},"investigation-protocol",[423],{"type":50,"value":424},"Investigation Protocol",{"type":44,"tag":207,"props":426,"children":427},{},[428,430,436,438,443],{"type":50,"value":429},"The protocol has two phases: ",{"type":44,"tag":431,"props":432,"children":433},"strong",{},[434],{"type":50,"value":435},"collect evidence first",{"type":50,"value":437},", then ",{"type":44,"tag":431,"props":439,"children":440},{},[441],{"type":50,"value":442},"analyze",{"type":50,"value":444},". Do not jump to conclusions or propose remediation until you have completed the collection phase.",{"type":44,"tag":242,"props":446,"children":448},{"id":447},"phase-1-collect-evidence",[449],{"type":50,"value":450},"Phase 1 — Collect evidence",{"type":44,"tag":452,"props":453,"children":455},"h3",{"id":454},"step-1-scope-the-blast-radius",[456],{"type":50,"value":457},"Step 1 — Scope the blast radius",{"type":44,"tag":207,"props":459,"children":460},{},[461],{"type":50,"value":462},"Determine the scope of the alerts: is it one pod, one node, one namespace, or cluster-wide? This determines which layer to start from and which tools to prioritize.",{"type":44,"tag":452,"props":464,"children":466},{"id":465},"step-2-set-up-and-query-the-alerts",[467],{"type":50,"value":468},"Step 2 — Set up and query the alerts",{"type":44,"tag":207,"props":470,"children":471},{},[472],{"type":50,"value":473},"Configure Prometheus access:",{"type":44,"tag":475,"props":476,"children":481},"pre",{"className":477,"code":478,"language":479,"meta":480,"style":480},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","eval $(bash tools\u002Fprometheus-setup.sh)\n","bash","",[482],{"type":44,"tag":132,"props":483,"children":484},{"__ignoreMap":480},[485],{"type":44,"tag":486,"props":487,"children":490},"span",{"class":488,"line":489},"line",1,[491,496,502,507,513],{"type":44,"tag":486,"props":492,"children":494},{"style":493},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[495],{"type":50,"value":153},{"type":44,"tag":486,"props":497,"children":499},{"style":498},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[500],{"type":50,"value":501}," $(",{"type":44,"tag":486,"props":503,"children":505},{"style":504},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[506],{"type":50,"value":479},{"type":44,"tag":486,"props":508,"children":510},{"style":509},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[511],{"type":50,"value":512}," tools\u002Fprometheus-setup.sh",{"type":44,"tag":486,"props":514,"children":515},{"style":498},[516],{"type":50,"value":517},")\n",{"type":44,"tag":207,"props":519,"children":520},{},[521],{"type":50,"value":522},"For each alert provided:",{"type":44,"tag":475,"props":524,"children":526},{"className":477,"code":525,"language":479,"meta":480,"style":480},"bash tools\u002Fquery-alert.sh \u003CALERT_NAME>\nbash tools\u002Ffetch-alert-rule.sh \u003CALERT_NAME>\n",[527],{"type":44,"tag":132,"props":528,"children":529},{"__ignoreMap":480},[530,563],{"type":44,"tag":486,"props":531,"children":532},{"class":488,"line":489},[533,537,542,547,552,558],{"type":44,"tag":486,"props":534,"children":535},{"style":504},[536],{"type":50,"value":479},{"type":44,"tag":486,"props":538,"children":539},{"style":509},[540],{"type":50,"value":541}," tools\u002Fquery-alert.sh",{"type":44,"tag":486,"props":543,"children":544},{"style":498},[545],{"type":50,"value":546}," \u003C",{"type":44,"tag":486,"props":548,"children":549},{"style":509},[550],{"type":50,"value":551},"ALERT_NAM",{"type":44,"tag":486,"props":553,"children":555},{"style":554},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[556],{"type":50,"value":557},"E",{"type":44,"tag":486,"props":559,"children":560},{"style":498},[561],{"type":50,"value":562},">\n",{"type":44,"tag":486,"props":564,"children":566},{"class":488,"line":565},2,[567,571,576,580,584,588],{"type":44,"tag":486,"props":568,"children":569},{"style":504},[570],{"type":50,"value":479},{"type":44,"tag":486,"props":572,"children":573},{"style":509},[574],{"type":50,"value":575}," tools\u002Ffetch-alert-rule.sh",{"type":44,"tag":486,"props":577,"children":578},{"style":498},[579],{"type":50,"value":546},{"type":44,"tag":486,"props":581,"children":582},{"style":509},[583],{"type":50,"value":551},{"type":44,"tag":486,"props":585,"children":586},{"style":554},[587],{"type":50,"value":557},{"type":44,"tag":486,"props":589,"children":590},{"style":498},[591],{"type":50,"value":562},{"type":44,"tag":207,"props":593,"children":594},{},[595],{"type":50,"value":596},"Extract the full label set (namespace, pod, node, service, severity, etc.) from firing instances. Even if an alert is NOT firing, fetch the rule; the PromQL expression and labels contain diagnostic information.",{"type":44,"tag":207,"props":598,"children":599},{},[600,602,608],{"type":50,"value":601},"If the rule is found, check the annotations for ",{"type":44,"tag":132,"props":603,"children":605},{"className":604},[],[606],{"type":50,"value":607},"runbook_url",{"type":50,"value":609},". If present, extract the URL and follow the runbook steps as part of the analysis.",{"type":44,"tag":207,"props":611,"children":612},{},[613],{"type":50,"value":614},"Run each alert's PromQL expression to see current and recent values:",{"type":44,"tag":475,"props":616,"children":618},{"className":477,"code":617,"language":479,"meta":480,"style":480},"bash tools\u002Fprometheus-query.sh '\u003Cexpr>'\nbash tools\u002Fprometheus-query-range.sh '\u003Cexpr>'\n",[619],{"type":44,"tag":132,"props":620,"children":621},{"__ignoreMap":480},[622,649],{"type":44,"tag":486,"props":623,"children":624},{"class":488,"line":489},[625,629,634,639,644],{"type":44,"tag":486,"props":626,"children":627},{"style":504},[628],{"type":50,"value":479},{"type":44,"tag":486,"props":630,"children":631},{"style":509},[632],{"type":50,"value":633}," tools\u002Fprometheus-query.sh",{"type":44,"tag":486,"props":635,"children":636},{"style":498},[637],{"type":50,"value":638}," '",{"type":44,"tag":486,"props":640,"children":641},{"style":509},[642],{"type":50,"value":643},"\u003Cexpr>",{"type":44,"tag":486,"props":645,"children":646},{"style":498},[647],{"type":50,"value":648},"'\n",{"type":44,"tag":486,"props":650,"children":651},{"class":488,"line":565},[652,656,661,665,669],{"type":44,"tag":486,"props":653,"children":654},{"style":504},[655],{"type":50,"value":479},{"type":44,"tag":486,"props":657,"children":658},{"style":509},[659],{"type":50,"value":660}," tools\u002Fprometheus-query-range.sh",{"type":44,"tag":486,"props":662,"children":663},{"style":498},[664],{"type":50,"value":638},{"type":44,"tag":486,"props":666,"children":667},{"style":509},[668],{"type":50,"value":643},{"type":44,"tag":486,"props":670,"children":671},{"style":498},[672],{"type":50,"value":648},{"type":44,"tag":452,"props":674,"children":676},{"id":675},"step-3-collect-workload-state-and-logs",[677],{"type":50,"value":678},"Step 3 — Collect workload state and logs",{"type":44,"tag":207,"props":680,"children":681},{},[682,684,689],{"type":50,"value":683},"Using the namespaces and resources identified from the alert labels, list all deployments, statefulsets, and daemonsets in the affected namespaces. Then for ",{"type":44,"tag":431,"props":685,"children":686},{},[687],{"type":50,"value":688},"every",{"type":50,"value":690}," workload, collect its status and logs:",{"type":44,"tag":475,"props":692,"children":694},{"className":477,"code":693,"language":479,"meta":480,"style":480},"bash tools\u002Fdiagnose-workload.sh \u003Cname> \u003Cnamespace>\nbash tools\u002Fdiagnose-pod.sh \u003Cname-or-selector> \u003Cnamespace> --logs\n",[695],{"type":44,"tag":132,"props":696,"children":697},{"__ignoreMap":480},[698,746],{"type":44,"tag":486,"props":699,"children":700},{"class":488,"line":489},[701,705,710,714,719,724,729,733,738,742],{"type":44,"tag":486,"props":702,"children":703},{"style":504},[704],{"type":50,"value":479},{"type":44,"tag":486,"props":706,"children":707},{"style":509},[708],{"type":50,"value":709}," tools\u002Fdiagnose-workload.sh",{"type":44,"tag":486,"props":711,"children":712},{"style":498},[713],{"type":50,"value":546},{"type":44,"tag":486,"props":715,"children":716},{"style":509},[717],{"type":50,"value":718},"nam",{"type":44,"tag":486,"props":720,"children":721},{"style":554},[722],{"type":50,"value":723},"e",{"type":44,"tag":486,"props":725,"children":726},{"style":498},[727],{"type":50,"value":728},">",{"type":44,"tag":486,"props":730,"children":731},{"style":498},[732],{"type":50,"value":546},{"type":44,"tag":486,"props":734,"children":735},{"style":509},[736],{"type":50,"value":737},"namespac",{"type":44,"tag":486,"props":739,"children":740},{"style":554},[741],{"type":50,"value":723},{"type":44,"tag":486,"props":743,"children":744},{"style":498},[745],{"type":50,"value":562},{"type":44,"tag":486,"props":747,"children":748},{"class":488,"line":565},[749,753,758,762,767,772,776,780,784,788,792],{"type":44,"tag":486,"props":750,"children":751},{"style":504},[752],{"type":50,"value":479},{"type":44,"tag":486,"props":754,"children":755},{"style":509},[756],{"type":50,"value":757}," tools\u002Fdiagnose-pod.sh",{"type":44,"tag":486,"props":759,"children":760},{"style":498},[761],{"type":50,"value":546},{"type":44,"tag":486,"props":763,"children":764},{"style":509},[765],{"type":50,"value":766},"name-or-selecto",{"type":44,"tag":486,"props":768,"children":769},{"style":554},[770],{"type":50,"value":771},"r",{"type":44,"tag":486,"props":773,"children":774},{"style":498},[775],{"type":50,"value":728},{"type":44,"tag":486,"props":777,"children":778},{"style":498},[779],{"type":50,"value":546},{"type":44,"tag":486,"props":781,"children":782},{"style":509},[783],{"type":50,"value":737},{"type":44,"tag":486,"props":785,"children":786},{"style":554},[787],{"type":50,"value":723},{"type":44,"tag":486,"props":789,"children":790},{"style":498},[791],{"type":50,"value":728},{"type":44,"tag":486,"props":793,"children":794},{"style":509},[795],{"type":50,"value":796}," --logs\n",{"type":44,"tag":207,"props":798,"children":799},{},[800],{"type":50,"value":801},"This is mandatory. Do not skip workloads that appear healthy. A Running pod with no visible issues can still be the root cause if it is producing errors internally.",{"type":44,"tag":452,"props":803,"children":805},{"id":804},"step-4-collect-events-and-recent-changes",[806],{"type":50,"value":807},"Step 4 — Collect events and recent changes",{"type":44,"tag":475,"props":809,"children":811},{"className":477,"code":810,"language":479,"meta":480,"style":480},"bash tools\u002Fget-events.sh \u003Cnamespace>\nbash tools\u002Fcheck-recent-changes.sh \u003Cnamespace>\n",[812],{"type":44,"tag":132,"props":813,"children":814},{"__ignoreMap":480},[815,843],{"type":44,"tag":486,"props":816,"children":817},{"class":488,"line":489},[818,822,827,831,835,839],{"type":44,"tag":486,"props":819,"children":820},{"style":504},[821],{"type":50,"value":479},{"type":44,"tag":486,"props":823,"children":824},{"style":509},[825],{"type":50,"value":826}," tools\u002Fget-events.sh",{"type":44,"tag":486,"props":828,"children":829},{"style":498},[830],{"type":50,"value":546},{"type":44,"tag":486,"props":832,"children":833},{"style":509},[834],{"type":50,"value":737},{"type":44,"tag":486,"props":836,"children":837},{"style":554},[838],{"type":50,"value":723},{"type":44,"tag":486,"props":840,"children":841},{"style":498},[842],{"type":50,"value":562},{"type":44,"tag":486,"props":844,"children":845},{"class":488,"line":565},[846,850,855,859,863,867],{"type":44,"tag":486,"props":847,"children":848},{"style":504},[849],{"type":50,"value":479},{"type":44,"tag":486,"props":851,"children":852},{"style":509},[853],{"type":50,"value":854}," tools\u002Fcheck-recent-changes.sh",{"type":44,"tag":486,"props":856,"children":857},{"style":498},[858],{"type":50,"value":546},{"type":44,"tag":486,"props":860,"children":861},{"style":509},[862],{"type":50,"value":737},{"type":44,"tag":486,"props":864,"children":865},{"style":554},[866],{"type":50,"value":723},{"type":44,"tag":486,"props":868,"children":869},{"style":498},[870],{"type":50,"value":562},{"type":44,"tag":207,"props":872,"children":873},{},[874,876,882,884,890],{"type":50,"value":875},"The scripts cover rollouts and image pulls. Also check for: config\u002Fsecret edits, HPA scaling events, operator upgrades, node drains, and MachineConfig updates using ",{"type":44,"tag":132,"props":877,"children":879},{"className":878},[],[880],{"type":50,"value":881},"oc rollout history",{"type":50,"value":883},", ",{"type":44,"tag":132,"props":885,"children":887},{"className":886},[],[888],{"type":50,"value":889},"oc describe",{"type":50,"value":891},", and events sorted by time.",{"type":44,"tag":452,"props":893,"children":895},{"id":894},"step-5-collect-all-firing-alerts-for-correlation",[896],{"type":50,"value":897},"Step 5 — Collect all firing alerts for correlation",{"type":44,"tag":475,"props":899,"children":901},{"className":477,"code":900,"language":479,"meta":480,"style":480},"bash tools\u002Fget-firing-alerts.sh\n",[902],{"type":44,"tag":132,"props":903,"children":904},{"__ignoreMap":480},[905],{"type":44,"tag":486,"props":906,"children":907},{"class":488,"line":489},[908,912],{"type":44,"tag":486,"props":909,"children":910},{"style":504},[911],{"type":50,"value":479},{"type":44,"tag":486,"props":913,"children":914},{"style":509},[915],{"type":50,"value":916}," tools\u002Fget-firing-alerts.sh\n",{"type":44,"tag":242,"props":918,"children":920},{"id":919},"phase-2-analyze-and-diagnose",[921],{"type":50,"value":922},"Phase 2 — Analyze and diagnose",{"type":44,"tag":452,"props":924,"children":926},{"id":925},"step-6-correlate-alerts",[927],{"type":50,"value":928},"Step 6 — Correlate alerts",{"type":44,"tag":207,"props":930,"children":931},{},[932],{"type":50,"value":933},"Group all firing alerts by shared labels to find the common root cause:",{"type":44,"tag":53,"props":935,"children":936},{},[937,949,960,978],{"type":44,"tag":57,"props":938,"children":939},{},[940,942,947],{"type":50,"value":941},"Alerts sharing the same ",{"type":44,"tag":431,"props":943,"children":944},{},[945],{"type":50,"value":946},"node",{"type":50,"value":948}," → likely a node-level issue (investigate the node first)",{"type":44,"tag":57,"props":950,"children":951},{},[952,953,958],{"type":50,"value":941},{"type":44,"tag":431,"props":954,"children":955},{},[956],{"type":50,"value":957},"namespace",{"type":50,"value":959}," but on different nodes → likely an application or config issue",{"type":44,"tag":57,"props":961,"children":962},{},[963,964,969,971,976],{"type":50,"value":941},{"type":44,"tag":431,"props":965,"children":966},{},[967],{"type":50,"value":968},"job",{"type":50,"value":970}," or ",{"type":44,"tag":431,"props":972,"children":973},{},[974],{"type":50,"value":975},"service",{"type":50,"value":977}," → dependency or networking issue",{"type":44,"tag":57,"props":979,"children":980},{},[981],{"type":50,"value":982},"Alerts across multiple namespaces and nodes → cluster-wide issue (check operators, control plane, networking)",{"type":44,"tag":207,"props":984,"children":985},{},[986],{"type":50,"value":987},"Prioritize investigation from infrastructure inward: node → operator → workload → pod.",{"type":44,"tag":452,"props":989,"children":991},{"id":990},"step-7-trace-causality-chains",[992],{"type":50,"value":993},"Step 7 — Trace causality chains",{"type":44,"tag":207,"props":995,"children":996},{},[997],{"type":50,"value":998},"Use the evidence collected in phase 1 to trace the chain from symptom to root cause. If resource A fails because of B, investigate B. At each link, check status conditions and events. Common chains in OpenShift:",{"type":44,"tag":53,"props":1000,"children":1001},{},[1002,1007,1012,1017,1030],{"type":44,"tag":57,"props":1003,"children":1004},{},[1005],{"type":50,"value":1006},"Pod pending → pod conditions (PodScheduled, Unschedulable) and events → node pressure, unschedulable nodes, resource quota, or PVC not bound",{"type":44,"tag":57,"props":1008,"children":1009},{},[1010],{"type":50,"value":1011},"Pod crash-looping → container statuses (terminated reason: OOMKilled, Error) and logs → OOMKilled (check limits vs. actual usage), application error, misconfigured probes",{"type":44,"tag":57,"props":1013,"children":1014},{},[1015],{"type":50,"value":1016},"Service unreachable → endpoints\u002Fendpointslices → no endpoints → pods not ready → readiness probe and pod conditions",{"type":44,"tag":57,"props":1018,"children":1019},{},[1020,1022,1028],{"type":50,"value":1021},"Operator degraded → ",{"type":44,"tag":132,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":50,"value":1027},"bash tools\u002Fdiagnose-operator.sh \u003Cname>",{"type":50,"value":1029}," (check Available, Degraded, Progressing with messages) → operand pod failing → node issue or config error",{"type":44,"tag":57,"props":1031,"children":1032},{},[1033],{"type":50,"value":1034},"Node NotReady → node conditions (Ready, MemoryPressure, DiskPressure, PIDPressure) and events → kubelet issues, certificate expired, MCO update stuck, or kernel panic",{"type":44,"tag":207,"props":1036,"children":1037},{},[1038,1040,1045],{"type":50,"value":1039},"Use the range query data from step 2 and the recent changes from step 4 to identify ",{"type":44,"tag":431,"props":1041,"children":1042},{},[1043],{"type":50,"value":1044},"when",{"type":50,"value":1046}," the problem started and what changed around that time.",{"type":44,"tag":207,"props":1048,"children":1049},{},[1050],{"type":50,"value":1051},"After identifying a root cause, keep digging: collect exact names, versions, and labels, and check for additional contributing factors before concluding.",{"type":44,"tag":452,"props":1053,"children":1055},{"id":1054},"step-8-recommend-remediation-options",[1056],{"type":50,"value":1057},"Step 8 — Recommend remediation options",{"type":44,"tag":207,"props":1059,"children":1060},{},[1061],{"type":50,"value":1062},"Based on the collected evidence, propose remediation options. Provide the exact commands to run. When multiple options exist, list them from least to most disruptive and note whether each action is reversible. If the root cause is unclear, state what is known, suggest mitigations to reduce impact, and identify what additional data would narrow the diagnosis.",{"type":44,"tag":207,"props":1064,"children":1065},{},[1066,1071,1073,1078,1080,1086,1088,1094,1096,1101],{"type":44,"tag":431,"props":1067,"children":1068},{},[1069],{"type":50,"value":1070},"RBAC requirements for remediation:",{"type":50,"value":1072}," the agent's ServiceAccount has ",{"type":44,"tag":431,"props":1074,"children":1075},{},[1076],{"type":50,"value":1077},"read-only",{"type":50,"value":1079}," permissions (",{"type":44,"tag":132,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":50,"value":1085},"cluster-reader",{"type":50,"value":1087}," + ",{"type":44,"tag":132,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":50,"value":1093},"cluster-monitoring-view",{"type":50,"value":1095},"). Any proposed remediation command (patch, delete, scale, rollout restart, etc.) requires additional RBAC that the agent does not have. For every proposed option, you ",{"type":44,"tag":431,"props":1097,"children":1098},{},[1099],{"type":50,"value":1100},"must",{"type":50,"value":1102}," include a complete RBAC section listing:",{"type":44,"tag":53,"props":1104,"children":1105},{},[1106,1134,1139],{"type":44,"tag":57,"props":1107,"children":1108},{},[1109,1111,1117,1119,1125,1126,1132],{"type":50,"value":1110},"The exact API group, resource, and verbs required (e.g., ",{"type":44,"tag":132,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":50,"value":1116},"apps",{"type":50,"value":1118}," \u002F ",{"type":44,"tag":132,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":50,"value":1124},"deployments",{"type":50,"value":1118},{"type":44,"tag":132,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":50,"value":1131},"patch",{"type":50,"value":1133},")",{"type":44,"tag":57,"props":1135,"children":1136},{},[1137],{"type":50,"value":1138},"The namespace scope (specific namespace or cluster-wide)",{"type":44,"tag":57,"props":1140,"children":1141},{},[1142],{"type":50,"value":1143},"A ready-to-apply Role or ClusterRole YAML snippet the admin can use to grant the permissions",{"type":44,"tag":207,"props":1145,"children":1146},{},[1147],{"type":50,"value":1148},"This is critical; without this information the admin cannot safely execute the proposed remediation.",{"type":44,"tag":1150,"props":1151,"children":1152},"style",{},[1153],{"type":50,"value":1154},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1156,"total":1280},[1157,1172,1185,1198,1211,1224,1239,1247,1258,1268],{"slug":1158,"name":1158,"fn":1159,"description":1160,"org":1161,"tags":1162,"stars":1169,"repoUrl":1170,"updatedAt":1171},"degraded-operator-recovery","recover degraded OpenShift cluster operators","Troubleshoot ClusterOperator in Degraded, Unavailable, or not Progressing state. Use when operator status shows error conditions, reconciliation failures, or degraded health checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1163,1164,1165,1166],{"name":25,"slug":26,"type":15},{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1167,"slug":1168,"type":15},"SRE","sre",70,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Flightspeed-service","2026-04-06T18:43:30.354728",{"slug":1173,"name":1173,"fn":1174,"description":1175,"org":1176,"tags":1177,"stars":1169,"repoUrl":1170,"updatedAt":1184},"namespace-troubleshooting","troubleshoot OpenShift namespace and RBAC issues","Troubleshoot namespace stuck in Terminating state, ResourceQuota exhaustion, or RBAC permission denied errors. Use when resources cannot be created or forbidden errors occur.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1178,1181,1182,1183],{"name":1179,"slug":1180,"type":15},"Access Control","access-control",{"name":25,"slug":26,"type":15},{"name":23,"slug":8,"type":15},{"name":1167,"slug":1168,"type":15},"2026-04-06T18:43:29.107881",{"slug":1186,"name":1186,"fn":1187,"description":1188,"org":1189,"tags":1190,"stars":1169,"repoUrl":1170,"updatedAt":1197},"node-not-ready","troubleshoot OpenShift node status issues","Troubleshoot NotReady or SchedulingDisabled node status. Use when a node is down, unschedulable, or needs to be drained and restored.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1191,1192,1195,1196],{"name":25,"slug":26,"type":15},{"name":1193,"slug":1194,"type":15},"Engineering","engineering",{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:26.607462",{"slug":1199,"name":1199,"fn":1200,"description":1201,"org":1202,"tags":1203,"stars":1169,"repoUrl":1170,"updatedAt":1210},"pod-failure-diagnosis","diagnose OpenShift pod failure states","Troubleshoot CrashLoopBackOff, ImagePullBackOff, Pending, Error, or OOMKilled status. Use when a workload keeps restarting, fails to start, or is crash-looping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1204,1205,1208,1209],{"name":25,"slug":26,"type":15},{"name":1206,"slug":1207,"type":15},"Kubernetes","kubernetes",{"name":23,"slug":8,"type":15},{"name":1167,"slug":1168,"type":15},"2026-04-06T18:43:27.866868",{"slug":1212,"name":1212,"fn":1213,"description":1214,"org":1215,"tags":1216,"stars":1169,"repoUrl":1170,"updatedAt":1223},"route-ingress-troubleshooting","troubleshoot OpenShift Route and Ingress connectivity","Troubleshoot Route or Ingress connectivity failures. Use when traffic returns 502, 503, connection refused, or the endpoint is not reachable externally.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1217,1218,1221,1222],{"name":25,"slug":26,"type":15},{"name":1219,"slug":1220,"type":15},"Networking","networking",{"name":23,"slug":8,"type":15},{"name":1167,"slug":1168,"type":15},"2026-04-06T18:43:31.593028",{"slug":1225,"name":1225,"fn":1226,"description":1227,"org":1228,"tags":1229,"stars":27,"repoUrl":28,"updatedAt":1238},"cluster-update-advisor","assess OpenShift cluster update readiness","Assess OpenShift cluster update (upgrade) readiness and risk. Use when evaluating whether a cluster is safe to update, when an update is available, or when the user asks about update risks, prerequisites, blockers, or best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1230,1233,1234,1235],{"name":1231,"slug":1232,"type":15},"Deployment","deployment",{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1236,"slug":1237,"type":15},"Risk Assessment","risk-assessment","2026-05-12T06:07:16.759342",{"slug":4,"name":4,"fn":5,"description":6,"org":1240,"tags":1241,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1242,1243,1244,1245,1246],{"name":17,"slug":18,"type":15},{"name":25,"slug":26,"type":15},{"name":20,"slug":21,"type":15},{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1248,"name":1248,"fn":1249,"description":1250,"org":1251,"tags":1252,"stars":27,"repoUrl":28,"updatedAt":1257},"kubernetes-docs","search and read Kubernetes documentation","Search and read Kubernetes documentation in markdown format. Use when the user asks about Kubernetes concepts, tasks, API reference, kubectl, or any upstream k8s topic — including pods, deployments, services, RBAC, networking, storage, or scheduling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1253,1256],{"name":1254,"slug":1255,"type":15},"Documentation","documentation",{"name":1206,"slug":1207,"type":15},"2026-05-12T06:07:15.393562",{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1262,"tags":1263,"stars":27,"repoUrl":28,"updatedAt":1267},"openshift-docs","search and read OpenShift documentation","Search and read OpenShift Container Platform documentation in markdown format. Use when the user asks about OpenShift features, configuration, installation, troubleshooting, or any OCP-specific topic — including operators, routes, services, oc, RBAC, networking, storage, or cluster administration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1264,1265,1266],{"name":1254,"slug":1255,"type":15},{"name":1206,"slug":1207,"type":15},{"name":23,"slug":8,"type":15},"2026-05-12T06:07:14.03809",{"slug":1269,"name":1269,"fn":1270,"description":1271,"org":1272,"tags":1273,"stars":27,"repoUrl":28,"updatedAt":1279},"product-lifecycle","query Red Hat product lifecycle data","Query Red Hat Product Life Cycle data for support phases, end-of-life dates, and OpenShift version compatibility. Use when evaluating whether installed operators or layered products are supported on a given OCP version, approaching end of life, or need upgrading before a cluster upgrade. Also use when the user asks about product support status, EOL dates, or lifecycle phases for any Red Hat product.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1274,1275,1276],{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1277,"slug":1278,"type":15},"Reporting","reporting","2026-07-31T05:55:39.981651",10,{"items":1282,"total":27},[1283,1290,1298,1303,1309],{"slug":1225,"name":1225,"fn":1226,"description":1227,"org":1284,"tags":1285,"stars":27,"repoUrl":28,"updatedAt":1238},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1286,1287,1288,1289],{"name":1231,"slug":1232,"type":15},{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1236,"slug":1237,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1291,"tags":1292,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1293,1294,1295,1296,1297],{"name":17,"slug":18,"type":15},{"name":25,"slug":26,"type":15},{"name":20,"slug":21,"type":15},{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1248,"name":1248,"fn":1249,"description":1250,"org":1299,"tags":1300,"stars":27,"repoUrl":28,"updatedAt":1257},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1301,1302],{"name":1254,"slug":1255,"type":15},{"name":1206,"slug":1207,"type":15},{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1304,"tags":1305,"stars":27,"repoUrl":28,"updatedAt":1267},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1306,1307,1308],{"name":1254,"slug":1255,"type":15},{"name":1206,"slug":1207,"type":15},{"name":23,"slug":8,"type":15},{"slug":1269,"name":1269,"fn":1270,"description":1271,"org":1310,"tags":1311,"stars":27,"repoUrl":28,"updatedAt":1279},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1312,1313,1314],{"name":23,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1277,"slug":1278,"type":15}]