[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M720SYHF3JZYBM8CW52MCXS8":3,"skill-same:01M720SYHF3JZYBM8CW52MCXS8":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M720SYHF3JZYBM8CW52MCXS8","gke-rightsizing-checks",null,"Five required checks, and the arithmetic, before any proposal to lower a workload's CPU or memory requests or limits, or to change a node pool's machine type or size, and before any claim of capacity freed. Read-only. For \"lower the requests of X\", \"right-size this deployment\", \"can this pool use a smaller machine type\", and any answer that claims nodes, CPU, memory or a percentage freed.","gke-labs\u002Fkube-agents","gke-labs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197140281?v=4","01M720MEZR8K6WD2WTHNQE346Q","01M720MF0BRA9RGH1QVT4J0M0E",126,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fcluster\u002Fskills\u002Fgke-rightsizing-checks\u002FSKILL.md",[],[],"2026-11-10 18:39:20",false,"---\nname: gke-rightsizing-checks\ndescription: Five required checks, and the arithmetic, before any proposal to lower a workload's CPU or memory requests or limits, or to change a node pool's machine type or size, and before any claim of capacity freed. Read-only. For \"lower the requests of X\", \"right-size this deployment\", \"can this pool use a smaller machine type\", and any answer that claims nodes, CPU, memory or a percentage freed.\n---\n\n# GKE Rightsizing Checks\n\nUse this skill before you propose a lower request or limit, a machine type or a node count, and before you claim capacity freed. Raising a limit to stop an OOMKill is a fix, not a rightsizing proposal, and this skill does not apply to it. A request is rarely just a number: an HPA scales on it, a limit may be tied to it, a budget or a claim may share its pods, and the file that declares it may render other clusters too. A proposal that skips those reads looks right and changes something nobody asked to change.\n\nThe skill is read-only. It produces checks and arithmetic, and a proposal the person applies through the Platform Agent.\n\n## The rule\n\nRun all five checks for each workload or pool you propose to change, and show each one in the answer: what you checked, the command, and what it returned. A check you could not run is reported as not run, with the reason, and you propose no number for the dimension it governs. Every effect claim (nodes freed, CPU or memory freed, a percentage, \"fits without scale-up\") carries its calculation, with the inputs it used. Give no prices: this deployment has no price data, and a dollar figure here is a guess.\n\nOn GKE Autopilot, `kube-system\u002Fgke-system-balloon-pod` pods and GKE system reservation pods in `kube-system` or `gke-managed-*` hold low-priority spare scheduling headroom that GKE preempts automatically when user pods need CPU or memory. Never run these checks on them, never query or describe `balloon` pods, and never propose lowering or deleting them; scope rightsizing checks strictly to non-system user namespaces.\n\nSet the context once:\n\n```bash\ngcloud container clusters get-credentials \u003Ccluster_name> --region \u003Ccluster_location>\n```\n\n## 1. HPA or KEDA on the target\n\n```bash\nkubectl get hpa -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.metadata.name} {.spec.scaleTargetRef.kind}\u002F{.spec.scaleTargetRef.name} min={.spec.minReplicas} max={.spec.maxReplicas} {.spec.metrics}{\"\\n\"}{end}'\nkubectl get scaledobjects.keda.sh -n \u003Cnamespace> 2>&1 | head -5\n```\n\nA KEDA error that the resource type does not exist means KEDA is not installed; say so. If an HPA targets the workload on CPU or memory **utilization**, that utilization is usage divided by the request. A lower request raises the reading, and the HPA adds replicas. Show it with the HPA's own numbers: `desired = ceil(current_replicas × (usage \u002F new_request) \u002F target)`. For example, 4 replicas using 300m each against a 70% target: at a 500m request, `ceil(4 × 0.60 \u002F 0.70) = 4`; at 350m, `ceil(4 × 0.86 \u002F 0.70) = 5`. More replicas reserve more in total, so the cut can free nothing. Where the pods also cannot be placed (Pending replicas, a capped pool), the cut makes the backlog larger. The lever is usually the HPA target or `minReplicas`, not the request.\n\n## 2. QoS class, and requests against limits\n\n```bash\nkubectl get pods -n \u003Cnamespace> -l \u003Cselector> -o jsonpath='{range .items[*]}{.metadata.name} {.status.qosClass}{\"\\n\"}{end}'\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{range .spec.template.spec.containers[*]}{.name} req={.resources.requests} lim={.resources.limits}{\"\\n\"}{end}'\nkubectl top pods -n \u003Cnamespace> -l \u003Cselector> --containers\n```\n\n`Guaranteed` means requests equal limits on every container, on both dimensions. To keep it `Guaranteed`, a lower request is also a lower limit: a CPU limit throttles the container at that value, and a memory limit OOM-kills it there. Compare usage with the **limit**, not only the request. A container whose CPU use already sits at its limit is throttled now, and a lower figure throttles it harder. Lowering the request alone moves the pod to `Burstable`, so say that too. For `Burstable`, a lower memory request moves the pod earlier in the kubelet's eviction order under memory pressure. One `kubectl top` reading is a snapshot: name it as one, and do not size a limit from it. A proposed figure needs a peak over a longer window, such as a week of Cloud Monitoring history. If you have none, say that the proposal rests on one snapshot and must be checked against a longer peak before anyone applies it.\n\n## 3. Other objects that share its pods or its volumes\n\n```bash\nkubectl get svc,pdb -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.kind} {.metadata.name} {.spec.selector}{\"\\n\"}{end}'\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}'\nkubectl get pods -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.metadata.name} {.spec.volumes[*].persistentVolumeClaim.claimName}{\"\\n\"}{end}'\n```\n\nReport each Service and PodDisruptionBudget whose selector matches the workload's pod labels, and each other pod that mounts the same claim. A PDB with `minAvailable` equal to the replica count blocks every drain, and a change that alters the replica count changes what the budget allows. Two controllers whose selectors overlap mean a change to one also changes what the other's Service sends traffic to.\n\n## 4. Files shared across clusters\n\nYou read one cluster and hold no repository. Report where the workload says it comes from, so the Platform Agent can check the file:\n\n```bash\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{.metadata.labels}{\"\\n\"}{.metadata.annotations}'\n```\n\nName the source the metadata shows:\n\n- Helm: the `meta.helm.sh\u002Frelease-name` and `meta.helm.sh\u002Frelease-namespace` annotations.\n- Argo CD: the `argocd.argoproj.io\u002Ftracking-id` annotation, or the `argocd.argoproj.io\u002Finstance` or `app.kubernetes.io\u002Finstance` label.\n- Flux: the `kustomize.toolkit.fluxcd.io\u002Fname` or `helm.toolkit.fluxcd.io\u002Fname` label.\n- Config Sync: any `configsync.gke.io\u002F` annotation; `configmanagement.gke.io\u002Fsource-path` names the file.\n\nThen say that one values file or kustomize base can render this workload on other clusters, so an edit there changes all of them, and that the Platform Agent must confirm which file declares it before a change is written. If the metadata shows no source, say that.\n\n## 5. Per-node packing, with both vCPU and memory\n\nNeeded for any claim about nodes, machine types or \"fits\". Read the pool's nodes and what is already booked on them:\n\n```bash\nkubectl get nodes -l cloud.google.com\u002Fgke-nodepool=\u003Cpool> -o jsonpath='{range .items[*]}{.metadata.name} {.metadata.labels.node\\.kubernetes\\.io\u002Finstance-type} cpu={.status.allocatable.cpu} mem={.status.allocatable.memory}{\"\\n\"}{end}'\nkubectl describe nodes -l cloud.google.com\u002Fgke-nodepool=\u003Cpool> | grep -A6 'Allocated resources'\n```\n\nCalculate per dimension and show both: `nodes_needed = max(ceil(total_cpu_requests \u002F allocatable_cpu_per_node), ceil(total_memory_requests \u002F allocatable_memory_per_node))`, with DaemonSet requests counted on every node. Use allocatable, not the machine's nominal size: on a small node, system reservations take a large share. For a machine-type change, compare both dimensions: `e2-highcpu-8` (8 vCPU, 8 GB) to `e2-standard-4` (4 vCPU, 16 GB) halves the CPU and doubles the memory, so \"halves the resources\" is wrong, and the node count follows from the packing, not from the vCPU ratio. Say which dimension binds.\n\n## Writing the answer\n\nPass `rightsizing` to `kanban_complete`, one entry per workload or pool:\n\n- `workload`: its name.\n- `dependency_kind`: `hpa`, `guaranteed_qos`, `pdb_or_pvc`, `shared_file` or `none`, from checks 1 to 4; `not_on_cluster` when your cluster does not run it. If several apply, pick the first in that order and name the others in `dependency`.\n- `dependency`: one sentence on what the dependency means for a cut, for example \"a lower request adds replicas\" or \"a lower request is also a lower limit\".\n- `checks`: one finding each for `hpa`, `qos`, `sharing`, `source` and `packing`, with the command or reading behind it. \"No HPA targets it\" is a finding. Not needed for `not_on_cluster`.\n\nPass at most 8 entries. Each field is one line of at most 200 characters, with no code fence. The tool renders these entries in your `result`, and the Platform Agent's summary gets the same lines, so the person sees each dependency whatever the summary says. `kanban_complete` refuses, once, a completion without them on a card that names this skill.\n\nIn `result` itself, after at most one bold sentence, for each workload or pool:\n\n1. **The proposal:** the new figures, or why no cut is safe. A dependency that makes the cut unsafe is the answer, stated first.\n2. **The arithmetic:** each effect claim with its inputs and its result, in resource units, never in currency.\n\nHand the change back to the Platform Agent as a proposal. You do not apply it.\n","# GKE Rightsizing Checks\n\nUse this skill before you propose a lower request or limit, a machine type or a node count, and before you claim capacity freed. Raising a limit to stop an OOMKill is a fix, not a rightsizing proposal, and this skill does not apply to it. A request is rarely just a number: an HPA scales on it, a limit may be tied to it, a budget or a claim may share its pods, and the file that declares it may render other clusters too. A proposal that skips those reads looks right and changes something nobody asked to change.\n\nThe skill is read-only. It produces checks and arithmetic, and a proposal the person applies through the Platform Agent.\n\n## The rule\n\nRun all five checks for each workload or pool you propose to change, and show each one in the answer: what you checked, the command, and what it returned. A check you could not run is reported as not run, with the reason, and you propose no number for the dimension it governs. Every effect claim (nodes freed, CPU or memory freed, a percentage, \"fits without scale-up\") carries its calculation, with the inputs it used. Give no prices: this deployment has no price data, and a dollar figure here is a guess.\n\nOn GKE Autopilot, `kube-system\u002Fgke-system-balloon-pod` pods and GKE system reservation pods in `kube-system` or `gke-managed-*` hold low-priority spare scheduling headroom that GKE preempts automatically when user pods need CPU or memory. Never run these checks on them, never query or describe `balloon` pods, and never propose lowering or deleting them; scope rightsizing checks strictly to non-system user namespaces.\n\nSet the context once:\n\n```bash\ngcloud container clusters get-credentials \u003Ccluster_name> --region \u003Ccluster_location>\n```\n\n## 1. HPA or KEDA on the target\n\n```bash\nkubectl get hpa -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.metadata.name} {.spec.scaleTargetRef.kind}\u002F{.spec.scaleTargetRef.name} min={.spec.minReplicas} max={.spec.maxReplicas} {.spec.metrics}{\"\\n\"}{end}'\nkubectl get scaledobjects.keda.sh -n \u003Cnamespace> 2>&1 | head -5\n```\n\nA KEDA error that the resource type does not exist means KEDA is not installed; say so. If an HPA targets the workload on CPU or memory **utilization**, that utilization is usage divided by the request. A lower request raises the reading, and the HPA adds replicas. Show it with the HPA's own numbers: `desired = ceil(current_replicas × (usage \u002F new_request) \u002F target)`. For example, 4 replicas using 300m each against a 70% target: at a 500m request, `ceil(4 × 0.60 \u002F 0.70) = 4`; at 350m, `ceil(4 × 0.86 \u002F 0.70) = 5`. More replicas reserve more in total, so the cut can free nothing. Where the pods also cannot be placed (Pending replicas, a capped pool), the cut makes the backlog larger. The lever is usually the HPA target or `minReplicas`, not the request.\n\n## 2. QoS class, and requests against limits\n\n```bash\nkubectl get pods -n \u003Cnamespace> -l \u003Cselector> -o jsonpath='{range .items[*]}{.metadata.name} {.status.qosClass}{\"\\n\"}{end}'\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{range .spec.template.spec.containers[*]}{.name} req={.resources.requests} lim={.resources.limits}{\"\\n\"}{end}'\nkubectl top pods -n \u003Cnamespace> -l \u003Cselector> --containers\n```\n\n`Guaranteed` means requests equal limits on every container, on both dimensions. To keep it `Guaranteed`, a lower request is also a lower limit: a CPU limit throttles the container at that value, and a memory limit OOM-kills it there. Compare usage with the **limit**, not only the request. A container whose CPU use already sits at its limit is throttled now, and a lower figure throttles it harder. Lowering the request alone moves the pod to `Burstable`, so say that too. For `Burstable`, a lower memory request moves the pod earlier in the kubelet's eviction order under memory pressure. One `kubectl top` reading is a snapshot: name it as one, and do not size a limit from it. A proposed figure needs a peak over a longer window, such as a week of Cloud Monitoring history. If you have none, say that the proposal rests on one snapshot and must be checked against a longer peak before anyone applies it.\n\n## 3. Other objects that share its pods or its volumes\n\n```bash\nkubectl get svc,pdb -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.kind} {.metadata.name} {.spec.selector}{\"\\n\"}{end}'\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}'\nkubectl get pods -n \u003Cnamespace> -o jsonpath='{range .items[*]}{.metadata.name} {.spec.volumes[*].persistentVolumeClaim.claimName}{\"\\n\"}{end}'\n```\n\nReport each Service and PodDisruptionBudget whose selector matches the workload's pod labels, and each other pod that mounts the same claim. A PDB with `minAvailable` equal to the replica count blocks every drain, and a change that alters the replica count changes what the budget allows. Two controllers whose selectors overlap mean a change to one also changes what the other's Service sends traffic to.\n\n## 4. Files shared across clusters\n\nYou read one cluster and hold no repository. Report where the workload says it comes from, so the Platform Agent can check the file:\n\n```bash\nkubectl get deploy \u003Cname> -n \u003Cnamespace> -o jsonpath='{.metadata.labels}{\"\\n\"}{.metadata.annotations}'\n```\n\nName the source the metadata shows:\n\n- Helm: the `meta.helm.sh\u002Frelease-name` and `meta.helm.sh\u002Frelease-namespace` annotations.\n- Argo CD: the `argocd.argoproj.io\u002Ftracking-id` annotation, or the `argocd.argoproj.io\u002Finstance` or `app.kubernetes.io\u002Finstance` label.\n- Flux: the `kustomize.toolkit.fluxcd.io\u002Fname` or `helm.toolkit.fluxcd.io\u002Fname` label.\n- Config Sync: any `configsync.gke.io\u002F` annotation; `configmanagement.gke.io\u002Fsource-path` names the file.\n\nThen say that one values file or kustomize base can render this workload on other clusters, so an edit there changes all of them, and that the Platform Agent must confirm which file declares it before a change is written. If the metadata shows no source, say that.\n\n## 5. Per-node packing, with both vCPU and memory\n\nNeeded for any claim about nodes, machine types or \"fits\". Read the pool's nodes and what is already booked on them:\n\n```bash\nkubectl get nodes -l cloud.google.com\u002Fgke-nodepool=\u003Cpool> -o jsonpath='{range .items[*]}{.metadata.name} {.metadata.labels.node\\.kubernetes\\.io\u002Finstance-type} cpu={.status.allocatable.cpu} mem={.status.allocatable.memory}{\"\\n\"}{end}'\nkubectl describe nodes -l cloud.google.com\u002Fgke-nodepool=\u003Cpool> | grep -A6 'Allocated resources'\n```\n\nCalculate per dimension and show both: `nodes_needed = max(ceil(total_cpu_requests \u002F allocatable_cpu_per_node), ceil(total_memory_requests \u002F allocatable_memory_per_node))`, with DaemonSet requests counted on every node. Use allocatable, not the machine's nominal size: on a small node, system reservations take a large share. For a machine-type change, compare both dimensions: `e2-highcpu-8` (8 vCPU, 8 GB) to `e2-standard-4` (4 vCPU, 16 GB) halves the CPU and doubles the memory, so \"halves the resources\" is wrong, and the node count follows from the packing, not from the vCPU ratio. Say which dimension binds.\n\n## Writing the answer\n\nPass `rightsizing` to `kanban_complete`, one entry per workload or pool:\n\n- `workload`: its name.\n- `dependency_kind`: `hpa`, `guaranteed_qos`, `pdb_or_pvc`, `shared_file` or `none`, from checks 1 to 4; `not_on_cluster` when your cluster does not run it. If several apply, pick the first in that order and name the others in `dependency`.\n- `dependency`: one sentence on what the dependency means for a cut, for example \"a lower request adds replicas\" or \"a lower request is also a lower limit\".\n- `checks`: one finding each for `hpa`, `qos`, `sharing`, `source` and `packing`, with the command or reading behind it. \"No HPA targets it\" is a finding. Not needed for `not_on_cluster`.\n\nPass at most 8 entries. Each field is one line of at most 200 characters, with no code fence. The tool renders these entries in your `result`, and the Platform Agent's summary gets the same lines, so the person sees each dependency whatever the summary says. `kanban_complete` refuses, once, a completion without them on a card that names this skill.\n\nIn `result` itself, after at most one bold sentence, for each workload or pool:\n\n1. **The proposal:** the new figures, or why no cut is safe. A dependency that makes the cut unsafe is the answer, stated first.\n2. **The arithmetic:** each effect claim with its inputs and its result, in resource units, never in currency.\n\nHand the change back to the Platform Agent as a proposal. You do not apply it.\n",{"name":5,"description":7},"main","63856252193548b498b5a9e39aae2fcc79110995","agents\u002Fcluster\u002Fskills\u002Fgke-rightsizing-checks",44,"https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents","https:\u002F\u002Fgke-labs.github.io\u002Fkube-agents\u002F","https:\u002F\u002Fgithub.com\u002Fgke-labs","2026-11-13 04:37:57",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add gke-labs\u002Fkube-agents --skill gke-rightsizing-checks",{"tool":37,"command":38},"bunx","bunx skills add gke-labs\u002Fkube-agents --skill gke-rightsizing-checks",{"tool":40,"command":41},"pnpm","pnpm dlx skills add gke-labs\u002Fkube-agents --skill gke-rightsizing-checks","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fcluster\u002Fskills\u002Fgke-rightsizing-checks\u002FSKILL.md",true,[],[46,53,60,66,73,80],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":18},"01M72127MJP46SAFJP07BY692E","workload-rebalancing","Orchestrate cross-cluster workload rebalancing using the kanban board with the validation-then-declare pattern. Use when fleet utilization shows one cluster overutilized and another with headroom and a workload should move.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Fworkload-rebalancing\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":18},"01M72119CQFA9TC5TH6TKAFSFP","kube-agents-feedback","File a bug report, feature request, or question about kube-agents itself on the user's behalf, through the project's public feedback form, exactly once, after the user has confirmed the exact text in chat, and render the install's audited usage summary for a card that asks only for that, filing nothing. A submission becomes a public GitHub issue on gke-labs\u002Fkube-agents. Not for telling a user where to report — the persona bullet owns that answer without a skill.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Fkube-agents-feedback\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":18},"01M720VF2R142ZCD6QCKYNXAS9","cluster-agent-lifecycle","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Fcluster-agent-lifecycle\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":18},"01M720PHKEH8JCRZ6QR7AXEWSS","review-preflight","Runs the pre-PR review passes — adversarial and docs-drift on every change, plus chat UX whenever chat output changes — each in a context that did not write the change, and merges what they return into one disposition list.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Freview-preflight\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":18},"01M720VZZQNT2JQVK1JJCXX977","gce-compute-fleet-audit","Audits standalone GCE virtual machines, Managed Instance Groups (MIGs), serial console boot failures, sole-tenant node group headroom, and orphaned disk snapshots.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Fgce-compute-fleet-audit\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M720VKEW26G8QGT9NY4XQDR5","fleet-audit","Publish the findings of an autonomous fleet audit as one continuously-rewritten issue per audit stream per install on the GitOps repository's forge, and propose fixes as narrow remediation pull requests (merge requests on GitLab).","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Ffleet-audit\u002FSKILL.md",[],[]]