[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M720PC2JZ2NV08DK93YMH1VA":3,"skill-same:01M720PC2JZ2NV08DK93YMH1VA":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},"01M720PC2JZ2NV08DK93YMH1VA","review-chat-ux",null,"Reviews a diff that changes what users read in Slack or Google Chat against the chat UX rules, and reports each violation with file:line and the rule it breaks.","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\u002F.agents\u002Fskills\u002Freview-chat-ux\u002FSKILL.md",[],[],"2026-11-10 18:39:20",false,"---\nname: review-chat-ux\ndescription: Reviews a diff that changes what users read in Slack or Google Chat against the chat UX rules, and reports each violation with file:line and the rule it breaks.\n---\n\n# Task\n\nReview a diff range for chat output that breaks [`.agents\u002Frules\u002Fchat_ux.md`](..\u002F..\u002Frules\u002Fchat_ux.md).\nThe rule file owns the rules and their reasons; this skill holds the method. When they disagree, the\nrule file wins and this skill needs fixing.\n\nRun it in a context that did not write the change, as `review-preflight` arranges. Report; edit\nnothing.\n\n# Scope\n\nThe `paths:` frontmatter of `chat_ux.md` is the list of chat output files. The diff touches chat\noutput when it changes a non-test file matching one of those globs, adds or rewords a string a user\nreads in chat anywhere else, or changes who may confirm, stop or press a button. Inside scope, skip\nhunks that change no user-visible string, layout, posting decision or click gate.\n\n# Workflow\n\n## 1. Collect the user-facing surface\n\n- Run `git diff \u003Crange>` and list every hunk that adds or changes text a user reads: a string\n  constant, a format string, a fixture's expected post, a Block Kit or Chat card builder, an\n  instruction in a `SOUL.md` that shapes a reply.\n- Record for each: file:line, the exact text, and the moment it is read (ack, status, answer,\n  question, failure, notice, button).\n- Follow a changed constant to its call sites; a reworded constant can break a rule only where it\n  posts.\n\n## 2. Check each rule\n\nTest every surface item against each rule's paragraph in `chat_ux.md`, by its heading. The cues\nbelow say where violations hide; the paragraph is the test.\n\n- **The answer comes first, as one bold line**: Flag an answer whose first line is context, a\n  heading or a restatement; flag a change that moves the verdict below the fold or drops the\n  headline's bold; flag reasoning, a table or long detail above the fold.\n- **The acknowledgement names its target**: Flag an ack that is generic (`on it`), capitalised,\n  multi-sentence, not ended by a period, a restatement, named by the change instead of what is\n  checked, or carrying a task id, attribution or plan.\n- **One live status line, updated in place**: Flag a new post (Slack\n  `chat.postMessage`, Google Chat `messages.create`) for a progress step where an edit would do;\n  flag a progress line that survives the answer.\n- **No plumbing in user text**: Flag task ids, card ids, session keys, file paths, tool names,\n  JSON, CLI flags, exit codes and roster ids used as names. Allow a cluster, a workload, a linked\n  pull request, a specialist's name where `SOUL.md` asks for attribution, a board read's short\n  task id, and the command and output fences of the evidence section `kanban_complete` renders\n  from `verified_claims`.\n- **Choices are buttons**: Flag a choice offered without buttons, a button that does not send its\n  answer, \"reply X\", \"type X\" or \"say X\" in a message body; flag more than 5 buttons in one row.\n  Allow the text fallback listing the options.\n- **A failure is one plain line**: Flag an apology, a failure that does not lead with one plain\n  line, a gateway notice longer than that line, a failure that does not say what would work instead,\n  a retry or re-route offered as text rather than a button, or a retry promise; for each promise, find the code that retries and flag it when none runs on that path.\n- **Speak up only when it matters**: Flag a new message of its own that is not the\n  acknowledgement, a pull request opened, a question only the user can answer, a failure, or done.\n- **A destructive action needs the asker's confirm**: Flag a destructive action reachable without\n  stating the resolved target back and the asker's explicit confirm, or a confirm another\n  participant can satisfy.\n- **Renderers never compose**: Flag a renderer that writes words of its own, reads text to fill a\n  field or rewords; flag an invalid message rendered clipped or repaired instead of posting its\n  text fallback whole. Allow what the rule's paragraph names as the backend's own.\n\n## 3. Verify every candidate\n\n- Re-read the code path that posts the text; drop a candidate that never reaches a user (a log\n  line, a metric label, an error returned to an API caller).\n- Check the `SOUL.md` section the rule file names; a wording the section requires is not a\n  violation of this skill, and a conflict between them is a finding against the rule file.\n- Check both backends: a rule broken only on Google Chat is still broken.\n- Drop anything you cannot tie to a line in the diff.\n\n# Output\n\nOne row per surviving violation, ordered by how often a user meets the text:\n\n| file:line | rule (`chat_ux.md` heading) | text as posted | fix |\n| --------- | --------------------------- | -------------- | --- |\n\nAbove the table, list which rules were checked and which surface items were reviewed. \"No\nviolations\" is complete only alongside that list.\n","# Task\n\nReview a diff range for chat output that breaks [`.agents\u002Frules\u002Fchat_ux.md`](..\u002F..\u002Frules\u002Fchat_ux.md).\nThe rule file owns the rules and their reasons; this skill holds the method. When they disagree, the\nrule file wins and this skill needs fixing.\n\nRun it in a context that did not write the change, as `review-preflight` arranges. Report; edit\nnothing.\n\n# Scope\n\nThe `paths:` frontmatter of `chat_ux.md` is the list of chat output files. The diff touches chat\noutput when it changes a non-test file matching one of those globs, adds or rewords a string a user\nreads in chat anywhere else, or changes who may confirm, stop or press a button. Inside scope, skip\nhunks that change no user-visible string, layout, posting decision or click gate.\n\n# Workflow\n\n## 1. Collect the user-facing surface\n\n- Run `git diff \u003Crange>` and list every hunk that adds or changes text a user reads: a string\n  constant, a format string, a fixture's expected post, a Block Kit or Chat card builder, an\n  instruction in a `SOUL.md` that shapes a reply.\n- Record for each: file:line, the exact text, and the moment it is read (ack, status, answer,\n  question, failure, notice, button).\n- Follow a changed constant to its call sites; a reworded constant can break a rule only where it\n  posts.\n\n## 2. Check each rule\n\nTest every surface item against each rule's paragraph in `chat_ux.md`, by its heading. The cues\nbelow say where violations hide; the paragraph is the test.\n\n- **The answer comes first, as one bold line**: Flag an answer whose first line is context, a\n  heading or a restatement; flag a change that moves the verdict below the fold or drops the\n  headline's bold; flag reasoning, a table or long detail above the fold.\n- **The acknowledgement names its target**: Flag an ack that is generic (`on it`), capitalised,\n  multi-sentence, not ended by a period, a restatement, named by the change instead of what is\n  checked, or carrying a task id, attribution or plan.\n- **One live status line, updated in place**: Flag a new post (Slack\n  `chat.postMessage`, Google Chat `messages.create`) for a progress step where an edit would do;\n  flag a progress line that survives the answer.\n- **No plumbing in user text**: Flag task ids, card ids, session keys, file paths, tool names,\n  JSON, CLI flags, exit codes and roster ids used as names. Allow a cluster, a workload, a linked\n  pull request, a specialist's name where `SOUL.md` asks for attribution, a board read's short\n  task id, and the command and output fences of the evidence section `kanban_complete` renders\n  from `verified_claims`.\n- **Choices are buttons**: Flag a choice offered without buttons, a button that does not send its\n  answer, \"reply X\", \"type X\" or \"say X\" in a message body; flag more than 5 buttons in one row.\n  Allow the text fallback listing the options.\n- **A failure is one plain line**: Flag an apology, a failure that does not lead with one plain\n  line, a gateway notice longer than that line, a failure that does not say what would work instead,\n  a retry or re-route offered as text rather than a button, or a retry promise; for each promise, find the code that retries and flag it when none runs on that path.\n- **Speak up only when it matters**: Flag a new message of its own that is not the\n  acknowledgement, a pull request opened, a question only the user can answer, a failure, or done.\n- **A destructive action needs the asker's confirm**: Flag a destructive action reachable without\n  stating the resolved target back and the asker's explicit confirm, or a confirm another\n  participant can satisfy.\n- **Renderers never compose**: Flag a renderer that writes words of its own, reads text to fill a\n  field or rewords; flag an invalid message rendered clipped or repaired instead of posting its\n  text fallback whole. Allow what the rule's paragraph names as the backend's own.\n\n## 3. Verify every candidate\n\n- Re-read the code path that posts the text; drop a candidate that never reaches a user (a log\n  line, a metric label, an error returned to an API caller).\n- Check the `SOUL.md` section the rule file names; a wording the section requires is not a\n  violation of this skill, and a conflict between them is a finding against the rule file.\n- Check both backends: a rule broken only on Google Chat is still broken.\n- Drop anything you cannot tie to a line in the diff.\n\n# Output\n\nOne row per surviving violation, ordered by how often a user meets the text:\n\n| file:line | rule (`chat_ux.md` heading) | text as posted | fix |\n| --------- | --------------------------- | -------------- | --- |\n\nAbove the table, list which rules were checked and which surface items were reviewed. \"No\nviolations\" is complete only alongside that list.\n",{"name":5,"description":7},"main","63856252193548b498b5a9e39aae2fcc79110995",".agents\u002Fskills\u002Freview-chat-ux",43,"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-12 05:35:56",{"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 review-chat-ux",{"tool":37,"command":38},"bunx","bunx skills add gke-labs\u002Fkube-agents --skill review-chat-ux",{"tool":40,"command":41},"pnpm","pnpm dlx skills add gke-labs\u002Fkube-agents --skill review-chat-ux","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Freview-chat-ux\u002FSKILL.md",true,[],[46,53,60,67,74,81],{"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},"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":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},"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",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":18},"01M720SYHF3JZYBM8CW52MCXS8","gke-rightsizing-checks","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.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fcluster\u002Fskills\u002Fgke-rightsizing-checks\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":18},"01M720WDAGMMRY1FXYVHGE7HBV","github-issue-resolver","Autonomously poll, triage, investigate, and resolve unaddressed open issues on our target repository (on GitHub or GitLab) strictly within authorized scope.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002Fagents\u002Fplatform\u002Fskills\u002Fgithub-issue-resolver\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":18},"01M720PETPTF0TE7NEZC31BW5X","review-docs-drift","Reviews a pull request for documentation drift — finds which docs the change should have updated, verifies doc claims against source, and checks the docs map and AGENTS.md themselves for staleness.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Freview-docs-drift\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":18},"01M720P2559WMXBD73S6Z7ZE5D","install-kube-agents","Install, set up, or deploy kube-agents (the Kubernetes Agentic Harness) and its Platform Agent onto a GKE cluster in a GCP project, interactively or non-interactively. Use when asked to install, bootstrap, or onboard kube-agents, or to plan one with a dry run.","https:\u002F\u002Fgithub.com\u002Fgke-labs\u002Fkube-agents\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Finstall-kube-agents\u002FSKILL.md",[],[]]