[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-red-hat-developer-agent-ready":3,"mdc-m066dg-key":34,"related-repo-red-hat-developer-agent-ready":1814,"related-org-red-hat-developer-agent-ready":1919},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"agent-ready","assess repository readiness for AI agents","Assesses a git repository's readiness for use by AI coding agents using the agentready CLI, then walks through and addresses each gap. RHDH-aware: detects RHDH repositories and uses rhdh-repos.md context to pre-fill AGENTS.md and skip inapplicable findings. Use when asked to \"assess agent readiness\", \"run agentready\", \"check how agent-ready this repo is\", \"make this repo agent-ready\", \"improve agent readiness score\", \"assess all RHDH repos\", \"batch agent readiness\", or \"onboard this repo for agents\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"red-hat-developer","Red Hat Developer","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fred-hat-developer.png","redhat-developer",[13,17,20],{"name":14,"slug":15,"type":16},"Agents","agents","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"Code Analysis","code-analysis",15,"https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill","2026-07-16T06:03:24.758348",null,28,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Claude Code skill for RHDH plugin lifecycle management","https:\u002F\u002Fgithub.com\u002Fredhat-developer\u002Frhdh-skill\u002Ftree\u002FHEAD\u002Fskills\u002Fagent-ready","---\nname: agent-ready\ndescription: |\n  Assesses a git repository's readiness for use by AI coding agents using the agentready CLI, then walks through and addresses each gap. RHDH-aware: detects RHDH repositories and uses rhdh-repos.md context to pre-fill AGENTS.md and skip inapplicable findings. Use when asked to \"assess agent readiness\", \"run agentready\", \"check how agent-ready this repo is\", \"make this repo agent-ready\", \"improve agent readiness score\", \"assess all RHDH repos\", \"batch agent readiness\", or \"onboard this repo for agents\".\n---\n\n## Prerequisites\n\n`uvx` is a hard dependency. Verify it is available before any other step:\n\n```bash\nuvx --version\n```\n\nIf missing, stop: \"`uvx` is required. Install via `pip install uv` or see [uv installation](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F).\"\n\n## Step 1: Mode selection\n\nIf no path was provided, present a structured choice:\n\n- **Single repo** — assess the current working directory (default)\n- **Batch** — assess all RHDH repositories (see Batch mode below)\n\nIf a path was provided, skip this and proceed to Step 2.\n\n## Step 2: Setup\n\n**Path:** Use the provided path, or `.` for the current directory. Validate it is a git repository:\n\n```bash\ngit -C . rev-parse --is-inside-work-tree  # replace . with path if provided\n```\n\nIf not a git repository, stop and tell the user.\n\n**RHDH detection:** Check the repo's git remote URL:\n\n```bash\ngit -C \u003Cpath> remote get-url origin 2>\u002Fdev\u002Fnull\n```\n\nAttempt to read `~\u002F.claude\u002Fskills\u002Frhdh\u002Freferences\u002Frhdh-repos.md`. If the file does not exist, skip RHDH detection and proceed with generic assessment — do not stop or warn the user. If found, check whether the remote URL matches any repo's upstream URL. If matched, note the repo name, tech stack, key paths, and conventions — these inform AGENTS.md generation and finding triage. Store as `rhdh_context`.\n\n**Config file:** Only use a config file if the user explicitly provided one. Do not ask.\n\n## Step 3: Run the assessment\n\n```bash\nREPORT_DIR=$(mktemp -d)  # on Windows: use %TEMP% or Python tempfile\nuvx --from git+https:\u002F\u002Fgithub.com\u002Fambient-code\u002Fagentready agentready -- assess \\\n  -o \"$REPORT_DIR\" \\\n  \u003Cpath>\n```\n\nAppend `-c \u003Cconfig-path>` if the user provided a config file.\n\nNote the value of `$REPORT_DIR` — shell variables do not persist across tool calls.\n\nParse `$REPORT_DIR\u002Fassessment-latest.json`. Extract:\n- `overall_score`, `certification_level`\n- `findings` — each with `attribute.id`, `attribute.tier`, `attribute.default_weight`, `attribute.name`, `status`, `score`, `evidence`, `remediation`\n\n## Step 4: Present summary\n\n```\nScore: \u003Coverall_score>\u002F100 — \u003Ccertification_level>\nFailing: \u003CN> findings (\u003CN1> Tier 1, \u003CN2> Tier 2, ...)\n```\n\nIf no failing findings, congratulate the user and stop.\n\nOtherwise ask:\n\n> \"Fix applicable findings automatically, or review each one individually?\n> **auto** (default) — apply self-contained fixes immediately; prompt only when input is needed\n> **review** — prompt yes\u002Fskip\u002Fdefer\u002Fquit for every finding\"\n\nDefault to **auto** if the user says yes, presses Enter, or says \"fix everything\".\n\n## Step 5: Work through findings\n\nWork only through `status == \"fail\"` findings. Skip `not_applicable` and `pass` silently.\n\n**Sort order:** ascending tier, then descending `attribute.default_weight` within each tier.\n\nIf `rhdh_context` is set, skip findings that clearly don't apply to the detected tech stack (e.g., lock file checks for a Bash-only repo, `src\u002F` layout for a GitOps YAML repo) — note them in the summary.\n\n### Auto mode\n\nApply each fix without prompting **unless**:\n\n- The fix requires project-specific input (CI platform, package ecosystem)\n- The finding might not apply to this repo type — present it and ask whether to apply or skip\n\n**Skip without prompting:** ADRs, design intent, architecture decisions — these require human rationale. Note them in the final summary.\n\nFor the `agent_instructions` finding, follow the inline AGENTS.md generation in the `agent_instructions` section below — this applies in both auto and review modes.\n\nAfter processing, list what was applied, prompted, and skipped, then proceed to Step 6.\n\n### Review mode\n\nFor each finding:\n\n```\n[Tier \u003CN>] \u003Cattribute.name> — \u003Cscore>\u002F100\nEvidence: \u003Cevidence items>\n\nRemediation: \u003Cremediation.summary>\n\nApply this fix? [yes \u002F skip \u002F defer \u002F quit]\n```\n\n**yes** — apply the fix, then move to the next finding.\n**skip** — move on; do not revisit. Use this if the finding doesn't apply to this repo.\n**defer** — note it; surface again after re-run.\n**quit** — stop immediately.\n\n**ADR and design intent findings:** Do not use JSON remediation. Ask instead:\n\n> \"Do you have any architectural decisions worth capturing? Describe the decision and rationale — I'll write the ADR. Skip to add manually later.\"\n\nWrite only if the user provides input. Never invent rationale.\n\n### `agent_instructions` finding (both modes)\n\nGenerate `AGENTS.md` and `CLAUDE.md` inline — do not delegate to another skill.\n\n**Scan the repo for commands:**\n- `package.json` → `scripts` entries (build, test, lint, typecheck, dev)\n- `Makefile` \u002F `GNUmakefile` → targets\n- `pyproject.toml` → `[tool.pytest]`, `[tool.ruff]`, `[tool.mypy]`, `[project.scripts]`\n- `.github\u002Fworkflows\u002F*.yml` → `run:` steps containing test\u002Flint\u002Fbuild\u002Ftypecheck keywords\n\n**If `rhdh_context` is set:** pull key paths, tech stack, conventions, and branching model directly from the matched `rhdh-repos.md` entry — use these to pre-fill AGENTS.md sections and skip generic questions where RHDH context already answers them.\n\n**If not RHDH (or RHDH context doesn't cover it):** ask these three questions one at a time:\n1. \"What are 2-3 conventions an agent couldn't discover by reading the code? Skip if none.\"\n2. \"Any non-obvious architectural decisions or places where things live unexpectedly? Skip if obvious.\"\n3. \"Any commit format, CI checks, or PR conventions agents should know? Skip if standard.\"\n\nWrite `AGENTS.md`:\n\n```markdown\n# \u003Crepo-name>\n\n## Build & Test Commands\n- Build: `\u003Ccommand>`\n- Test all: `\u003Ccommand>`\n- Test single file: `\u003Ccommand>`\n- Lint: `\u003Ccommand>`\n- Type check: `\u003Ccommand>`\n\n## Key Conventions\n\u003Cfrom scan + questions\u002Frhdh_context>\n\n## Architecture\n\u003Cfrom questions\u002Frhdh_context — omit if nothing to say>\n\n## PR Conventions\n- Agent-assisted commits should include an `Assisted-by: \u003Cmodel>` footer\n\u003Cfrom questions>\n```\n\nWrite `CLAUDE.md` with exactly: `@AGENTS.md`\n\nOmit any section — including its header — where there is nothing to say. Do not invent content.\n\n### Applying other fixes (both modes)\n\nUse `remediation.steps`, `remediation.commands`, and `remediation.examples` from the JSON. Do not invent steps beyond what the JSON provides.\n\n## Step 6: Re-run and present results\n\n```bash\nREPORT_DIR=$(mktemp -d)  # on Windows: use %TEMP% or Python tempfile\nuvx --from git+https:\u002F\u002Fgithub.com\u002Fambient-code\u002Fagentready agentready -- assess \\\n  -o \"$REPORT_DIR\" \\\n  \u003Cpath>\n```\n\nShow before\u002Fafter:\n\n```\nBefore: \u003Cold_score>\u002F100 (\u003Cold_certification_level>)\nAfter:  \u003Cnew_score>\u002F100 (\u003Cnew_certification_level>)\n\nRemaining failures: \u003CN> findings\n```\n\nIf remaining failures (including deferred), ask: \"Would you like to continue addressing the remaining findings?\" If yes, repeat Step 5.\n\n## Batch mode\n\nWhen the user selects batch assessment:\n\n1. Ask: \"What directory are your RHDH repos cloned into? (e.g. `~\u002Fgit`)\"\n2. Find subdirectories that are git repos:\n\n```bash\nfind \u003Cdir> -maxdepth 2 -name \".git\" -type d | sed 's|\u002F.git||'\n```\n\n3. For each, check if the remote URL matches a repo in `rhdh-repos.md`. Assess only matching repos.\n4. Run the assessment on each matched repo (Step 3) and collect results.\n5. Present a summary table:\n\n```\nRepo                        Score   Level              Failing\nrhdh                        72\u002F100  Bronze             4\nrhdh-operator               45\u002F100  Needs Improvement  11\nrhdh-plugins                88\u002F100  Silver             1\n```\n\n6. Ask: \"Would you like to address findings for any of these repos?\" If yes, the user picks one — run Step 3 (assessment) on that repo to get fresh findings, then run Steps 4–6 for it.\n\n## Gotchas\n\n- The first `uvx` run fetches and builds agentready from GitHub — this can take 30–60 seconds. Subsequent runs use the cache. If the fetch fails, stop — do not proceed without a valid report.\n- Do not output the report to the repository directory — use the temp dir to avoid polluting the working tree.\n- `not_applicable` findings reflect the detected language stack; do not mention them unless the user asks.\n- Deferred findings surface again after the re-run.\n- Never invent rationale for ADRs or design docs. In auto mode, skip them. In review mode, ask for rationale before writing anything.\n- In batch mode, only assess repos whose remote URL matches `rhdh-repos.md` — do not assess unrelated repos in the same directory.\n- `rhdh-repos.md` is expected at `~\u002F.claude\u002Fskills\u002Frhdh\u002Freferences\u002Frhdh-repos.md` — the default install path when using `npx skills add redhat-developer\u002Frhdh-skill`. If the `rhdh` skill was installed to a different prefix, RHDH detection will silently degrade to generic mode. This is by design — no error, no warning.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,61,89,120,126,131,157,162,168,186,227,232,242,307,327,337,343,471,484,496,509,595,601,611,616,621,644,655,661,690,707,727,734,746,759,769,789,794,800,805,814,845,855,863,868,879,899,907,1003,1027,1037,1056,1067,1359,1376,1381,1387,1415,1421,1527,1532,1541,1546,1552,1557,1578,1675,1700,1709,1717,1723,1808],{"type":40,"tag":41,"props":42,"children":44},"element","h2",{"id":43},"prerequisites",[45],{"type":46,"value":47},"text","Prerequisites",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52,59],{"type":40,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":46,"value":58},"uvx",{"type":46,"value":60}," is a hard dependency. Verify it is available before any other step:",{"type":40,"tag":62,"props":63,"children":68},"pre",{"className":64,"code":65,"language":66,"meta":67,"style":67},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uvx --version\n","bash","",[69],{"type":40,"tag":53,"props":70,"children":71},{"__ignoreMap":67},[72],{"type":40,"tag":73,"props":74,"children":77},"span",{"class":75,"line":76},"line",1,[78,83],{"type":40,"tag":73,"props":79,"children":81},{"style":80},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[82],{"type":46,"value":58},{"type":40,"tag":73,"props":84,"children":86},{"style":85},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[87],{"type":46,"value":88}," --version\n",{"type":40,"tag":49,"props":90,"children":91},{},[92,94,99,101,107,109,118],{"type":46,"value":93},"If missing, stop: \"",{"type":40,"tag":53,"props":95,"children":97},{"className":96},[],[98],{"type":46,"value":58},{"type":46,"value":100}," is required. Install via ",{"type":40,"tag":53,"props":102,"children":104},{"className":103},[],[105],{"type":46,"value":106},"pip install uv",{"type":46,"value":108}," or see ",{"type":40,"tag":110,"props":111,"children":115},"a",{"href":112,"rel":113},"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F",[114],"nofollow",[116],{"type":46,"value":117},"uv installation",{"type":46,"value":119},".\"",{"type":40,"tag":41,"props":121,"children":123},{"id":122},"step-1-mode-selection",[124],{"type":46,"value":125},"Step 1: Mode selection",{"type":40,"tag":49,"props":127,"children":128},{},[129],{"type":46,"value":130},"If no path was provided, present a structured choice:",{"type":40,"tag":132,"props":133,"children":134},"ul",{},[135,147],{"type":40,"tag":136,"props":137,"children":138},"li",{},[139,145],{"type":40,"tag":140,"props":141,"children":142},"strong",{},[143],{"type":46,"value":144},"Single repo",{"type":46,"value":146}," — assess the current working directory (default)",{"type":40,"tag":136,"props":148,"children":149},{},[150,155],{"type":40,"tag":140,"props":151,"children":152},{},[153],{"type":46,"value":154},"Batch",{"type":46,"value":156}," — assess all RHDH repositories (see Batch mode below)",{"type":40,"tag":49,"props":158,"children":159},{},[160],{"type":46,"value":161},"If a path was provided, skip this and proceed to Step 2.",{"type":40,"tag":41,"props":163,"children":165},{"id":164},"step-2-setup",[166],{"type":46,"value":167},"Step 2: Setup",{"type":40,"tag":49,"props":169,"children":170},{},[171,176,178,184],{"type":40,"tag":140,"props":172,"children":173},{},[174],{"type":46,"value":175},"Path:",{"type":46,"value":177}," Use the provided path, or ",{"type":40,"tag":53,"props":179,"children":181},{"className":180},[],[182],{"type":46,"value":183},".",{"type":46,"value":185}," for the current directory. Validate it is a git repository:",{"type":40,"tag":62,"props":187,"children":189},{"className":64,"code":188,"language":66,"meta":67,"style":67},"git -C . rev-parse --is-inside-work-tree  # replace . with path if provided\n",[190],{"type":40,"tag":53,"props":191,"children":192},{"__ignoreMap":67},[193],{"type":40,"tag":73,"props":194,"children":195},{"class":75,"line":76},[196,201,206,211,216,221],{"type":40,"tag":73,"props":197,"children":198},{"style":80},[199],{"type":46,"value":200},"git",{"type":40,"tag":73,"props":202,"children":203},{"style":85},[204],{"type":46,"value":205}," -C",{"type":40,"tag":73,"props":207,"children":208},{"style":85},[209],{"type":46,"value":210}," .",{"type":40,"tag":73,"props":212,"children":213},{"style":85},[214],{"type":46,"value":215}," rev-parse",{"type":40,"tag":73,"props":217,"children":218},{"style":85},[219],{"type":46,"value":220}," --is-inside-work-tree",{"type":40,"tag":73,"props":222,"children":224},{"style":223},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[225],{"type":46,"value":226},"  # replace . with path if provided\n",{"type":40,"tag":49,"props":228,"children":229},{},[230],{"type":46,"value":231},"If not a git repository, stop and tell the user.",{"type":40,"tag":49,"props":233,"children":234},{},[235,240],{"type":40,"tag":140,"props":236,"children":237},{},[238],{"type":46,"value":239},"RHDH detection:",{"type":46,"value":241}," Check the repo's git remote URL:",{"type":40,"tag":62,"props":243,"children":245},{"className":64,"code":244,"language":66,"meta":67,"style":67},"git -C \u003Cpath> remote get-url origin 2>\u002Fdev\u002Fnull\n",[246],{"type":40,"tag":53,"props":247,"children":248},{"__ignoreMap":67},[249],{"type":40,"tag":73,"props":250,"children":251},{"class":75,"line":76},[252,256,260,266,271,277,282,287,292,297,302],{"type":40,"tag":73,"props":253,"children":254},{"style":80},[255],{"type":46,"value":200},{"type":40,"tag":73,"props":257,"children":258},{"style":85},[259],{"type":46,"value":205},{"type":40,"tag":73,"props":261,"children":263},{"style":262},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[264],{"type":46,"value":265}," \u003C",{"type":40,"tag":73,"props":267,"children":268},{"style":85},[269],{"type":46,"value":270},"pat",{"type":40,"tag":73,"props":272,"children":274},{"style":273},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[275],{"type":46,"value":276},"h",{"type":40,"tag":73,"props":278,"children":279},{"style":262},[280],{"type":46,"value":281},">",{"type":40,"tag":73,"props":283,"children":284},{"style":85},[285],{"type":46,"value":286}," remote",{"type":40,"tag":73,"props":288,"children":289},{"style":85},[290],{"type":46,"value":291}," get-url",{"type":40,"tag":73,"props":293,"children":294},{"style":85},[295],{"type":46,"value":296}," origin",{"type":40,"tag":73,"props":298,"children":299},{"style":262},[300],{"type":46,"value":301}," 2>",{"type":40,"tag":73,"props":303,"children":304},{"style":85},[305],{"type":46,"value":306},"\u002Fdev\u002Fnull\n",{"type":40,"tag":49,"props":308,"children":309},{},[310,312,318,320,326],{"type":46,"value":311},"Attempt to read ",{"type":40,"tag":53,"props":313,"children":315},{"className":314},[],[316],{"type":46,"value":317},"~\u002F.claude\u002Fskills\u002Frhdh\u002Freferences\u002Frhdh-repos.md",{"type":46,"value":319},". If the file does not exist, skip RHDH detection and proceed with generic assessment — do not stop or warn the user. If found, check whether the remote URL matches any repo's upstream URL. If matched, note the repo name, tech stack, key paths, and conventions — these inform AGENTS.md generation and finding triage. Store as ",{"type":40,"tag":53,"props":321,"children":323},{"className":322},[],[324],{"type":46,"value":325},"rhdh_context",{"type":46,"value":183},{"type":40,"tag":49,"props":328,"children":329},{},[330,335],{"type":40,"tag":140,"props":331,"children":332},{},[333],{"type":46,"value":334},"Config file:",{"type":46,"value":336}," Only use a config file if the user explicitly provided one. Do not ask.",{"type":40,"tag":41,"props":338,"children":340},{"id":339},"step-3-run-the-assessment",[341],{"type":46,"value":342},"Step 3: Run the assessment",{"type":40,"tag":62,"props":344,"children":346},{"className":64,"code":345,"language":66,"meta":67,"style":67},"REPORT_DIR=$(mktemp -d)  # on Windows: use %TEMP% or Python tempfile\nuvx --from git+https:\u002F\u002Fgithub.com\u002Fambient-code\u002Fagentready agentready -- assess \\\n  -o \"$REPORT_DIR\" \\\n  \u003Cpath>\n",[347],{"type":40,"tag":53,"props":348,"children":349},{"__ignoreMap":67},[350,383,421,449],{"type":40,"tag":73,"props":351,"children":352},{"class":75,"line":76},[353,358,363,368,373,378],{"type":40,"tag":73,"props":354,"children":355},{"style":273},[356],{"type":46,"value":357},"REPORT_DIR",{"type":40,"tag":73,"props":359,"children":360},{"style":262},[361],{"type":46,"value":362},"=$(",{"type":40,"tag":73,"props":364,"children":365},{"style":80},[366],{"type":46,"value":367},"mktemp",{"type":40,"tag":73,"props":369,"children":370},{"style":85},[371],{"type":46,"value":372}," -d",{"type":40,"tag":73,"props":374,"children":375},{"style":262},[376],{"type":46,"value":377},")",{"type":40,"tag":73,"props":379,"children":380},{"style":223},[381],{"type":46,"value":382},"  # on Windows: use %TEMP% or Python tempfile\n",{"type":40,"tag":73,"props":384,"children":386},{"class":75,"line":385},2,[387,391,396,401,406,411,416],{"type":40,"tag":73,"props":388,"children":389},{"style":80},[390],{"type":46,"value":58},{"type":40,"tag":73,"props":392,"children":393},{"style":85},[394],{"type":46,"value":395}," --from",{"type":40,"tag":73,"props":397,"children":398},{"style":85},[399],{"type":46,"value":400}," git+https:\u002F\u002Fgithub.com\u002Fambient-code\u002Fagentready",{"type":40,"tag":73,"props":402,"children":403},{"style":85},[404],{"type":46,"value":405}," agentready",{"type":40,"tag":73,"props":407,"children":408},{"style":85},[409],{"type":46,"value":410}," --",{"type":40,"tag":73,"props":412,"children":413},{"style":85},[414],{"type":46,"value":415}," assess",{"type":40,"tag":73,"props":417,"children":418},{"style":273},[419],{"type":46,"value":420}," \\\n",{"type":40,"tag":73,"props":422,"children":424},{"class":75,"line":423},3,[425,430,435,440,445],{"type":40,"tag":73,"props":426,"children":427},{"style":85},[428],{"type":46,"value":429},"  -o",{"type":40,"tag":73,"props":431,"children":432},{"style":262},[433],{"type":46,"value":434}," \"",{"type":40,"tag":73,"props":436,"children":437},{"style":273},[438],{"type":46,"value":439},"$REPORT_DIR",{"type":40,"tag":73,"props":441,"children":442},{"style":262},[443],{"type":46,"value":444},"\"",{"type":40,"tag":73,"props":446,"children":447},{"style":273},[448],{"type":46,"value":420},{"type":40,"tag":73,"props":450,"children":452},{"class":75,"line":451},4,[453,458,462,466],{"type":40,"tag":73,"props":454,"children":455},{"style":262},[456],{"type":46,"value":457},"  \u003C",{"type":40,"tag":73,"props":459,"children":460},{"style":85},[461],{"type":46,"value":270},{"type":40,"tag":73,"props":463,"children":464},{"style":273},[465],{"type":46,"value":276},{"type":40,"tag":73,"props":467,"children":468},{"style":262},[469],{"type":46,"value":470},">\n",{"type":40,"tag":49,"props":472,"children":473},{},[474,476,482],{"type":46,"value":475},"Append ",{"type":40,"tag":53,"props":477,"children":479},{"className":478},[],[480],{"type":46,"value":481},"-c \u003Cconfig-path>",{"type":46,"value":483}," if the user provided a config file.",{"type":40,"tag":49,"props":485,"children":486},{},[487,489,494],{"type":46,"value":488},"Note the value of ",{"type":40,"tag":53,"props":490,"children":492},{"className":491},[],[493],{"type":46,"value":439},{"type":46,"value":495}," — shell variables do not persist across tool calls.",{"type":40,"tag":49,"props":497,"children":498},{},[499,501,507],{"type":46,"value":500},"Parse ",{"type":40,"tag":53,"props":502,"children":504},{"className":503},[],[505],{"type":46,"value":506},"$REPORT_DIR\u002Fassessment-latest.json",{"type":46,"value":508},". Extract:",{"type":40,"tag":132,"props":510,"children":511},{},[512,529],{"type":40,"tag":136,"props":513,"children":514},{},[515,521,523],{"type":40,"tag":53,"props":516,"children":518},{"className":517},[],[519],{"type":46,"value":520},"overall_score",{"type":46,"value":522},", ",{"type":40,"tag":53,"props":524,"children":526},{"className":525},[],[527],{"type":46,"value":528},"certification_level",{"type":40,"tag":136,"props":530,"children":531},{},[532,538,540,546,547,553,554,560,561,567,568,574,575,581,582,588,589],{"type":40,"tag":53,"props":533,"children":535},{"className":534},[],[536],{"type":46,"value":537},"findings",{"type":46,"value":539}," — each with ",{"type":40,"tag":53,"props":541,"children":543},{"className":542},[],[544],{"type":46,"value":545},"attribute.id",{"type":46,"value":522},{"type":40,"tag":53,"props":548,"children":550},{"className":549},[],[551],{"type":46,"value":552},"attribute.tier",{"type":46,"value":522},{"type":40,"tag":53,"props":555,"children":557},{"className":556},[],[558],{"type":46,"value":559},"attribute.default_weight",{"type":46,"value":522},{"type":40,"tag":53,"props":562,"children":564},{"className":563},[],[565],{"type":46,"value":566},"attribute.name",{"type":46,"value":522},{"type":40,"tag":53,"props":569,"children":571},{"className":570},[],[572],{"type":46,"value":573},"status",{"type":46,"value":522},{"type":40,"tag":53,"props":576,"children":578},{"className":577},[],[579],{"type":46,"value":580},"score",{"type":46,"value":522},{"type":40,"tag":53,"props":583,"children":585},{"className":584},[],[586],{"type":46,"value":587},"evidence",{"type":46,"value":522},{"type":40,"tag":53,"props":590,"children":592},{"className":591},[],[593],{"type":46,"value":594},"remediation",{"type":40,"tag":41,"props":596,"children":598},{"id":597},"step-4-present-summary",[599],{"type":46,"value":600},"Step 4: Present summary",{"type":40,"tag":62,"props":602,"children":606},{"className":603,"code":605,"language":46},[604],"language-text","Score: \u003Coverall_score>\u002F100 — \u003Ccertification_level>\nFailing: \u003CN> findings (\u003CN1> Tier 1, \u003CN2> Tier 2, ...)\n",[607],{"type":40,"tag":53,"props":608,"children":609},{"__ignoreMap":67},[610],{"type":46,"value":605},{"type":40,"tag":49,"props":612,"children":613},{},[614],{"type":46,"value":615},"If no failing findings, congratulate the user and stop.",{"type":40,"tag":49,"props":617,"children":618},{},[619],{"type":46,"value":620},"Otherwise ask:",{"type":40,"tag":622,"props":623,"children":624},"blockquote",{},[625],{"type":40,"tag":49,"props":626,"children":627},{},[628,630,635,637,642],{"type":46,"value":629},"\"Fix applicable findings automatically, or review each one individually?\n",{"type":40,"tag":140,"props":631,"children":632},{},[633],{"type":46,"value":634},"auto",{"type":46,"value":636}," (default) — apply self-contained fixes immediately; prompt only when input is needed\n",{"type":40,"tag":140,"props":638,"children":639},{},[640],{"type":46,"value":641},"review",{"type":46,"value":643}," — prompt yes\u002Fskip\u002Fdefer\u002Fquit for every finding\"",{"type":40,"tag":49,"props":645,"children":646},{},[647,649,653],{"type":46,"value":648},"Default to ",{"type":40,"tag":140,"props":650,"children":651},{},[652],{"type":46,"value":634},{"type":46,"value":654}," if the user says yes, presses Enter, or says \"fix everything\".",{"type":40,"tag":41,"props":656,"children":658},{"id":657},"step-5-work-through-findings",[659],{"type":46,"value":660},"Step 5: Work through findings",{"type":40,"tag":49,"props":662,"children":663},{},[664,666,672,674,680,682,688],{"type":46,"value":665},"Work only through ",{"type":40,"tag":53,"props":667,"children":669},{"className":668},[],[670],{"type":46,"value":671},"status == \"fail\"",{"type":46,"value":673}," findings. Skip ",{"type":40,"tag":53,"props":675,"children":677},{"className":676},[],[678],{"type":46,"value":679},"not_applicable",{"type":46,"value":681}," and ",{"type":40,"tag":53,"props":683,"children":685},{"className":684},[],[686],{"type":46,"value":687},"pass",{"type":46,"value":689}," silently.",{"type":40,"tag":49,"props":691,"children":692},{},[693,698,700,705],{"type":40,"tag":140,"props":694,"children":695},{},[696],{"type":46,"value":697},"Sort order:",{"type":46,"value":699}," ascending tier, then descending ",{"type":40,"tag":53,"props":701,"children":703},{"className":702},[],[704],{"type":46,"value":559},{"type":46,"value":706}," within each tier.",{"type":40,"tag":49,"props":708,"children":709},{},[710,712,717,719,725],{"type":46,"value":711},"If ",{"type":40,"tag":53,"props":713,"children":715},{"className":714},[],[716],{"type":46,"value":325},{"type":46,"value":718}," is set, skip findings that clearly don't apply to the detected tech stack (e.g., lock file checks for a Bash-only repo, ",{"type":40,"tag":53,"props":720,"children":722},{"className":721},[],[723],{"type":46,"value":724},"src\u002F",{"type":46,"value":726}," layout for a GitOps YAML repo) — note them in the summary.",{"type":40,"tag":728,"props":729,"children":731},"h3",{"id":730},"auto-mode",[732],{"type":46,"value":733},"Auto mode",{"type":40,"tag":49,"props":735,"children":736},{},[737,739,744],{"type":46,"value":738},"Apply each fix without prompting ",{"type":40,"tag":140,"props":740,"children":741},{},[742],{"type":46,"value":743},"unless",{"type":46,"value":745},":",{"type":40,"tag":132,"props":747,"children":748},{},[749,754],{"type":40,"tag":136,"props":750,"children":751},{},[752],{"type":46,"value":753},"The fix requires project-specific input (CI platform, package ecosystem)",{"type":40,"tag":136,"props":755,"children":756},{},[757],{"type":46,"value":758},"The finding might not apply to this repo type — present it and ask whether to apply or skip",{"type":40,"tag":49,"props":760,"children":761},{},[762,767],{"type":40,"tag":140,"props":763,"children":764},{},[765],{"type":46,"value":766},"Skip without prompting:",{"type":46,"value":768}," ADRs, design intent, architecture decisions — these require human rationale. Note them in the final summary.",{"type":40,"tag":49,"props":770,"children":771},{},[772,774,780,782,787],{"type":46,"value":773},"For the ",{"type":40,"tag":53,"props":775,"children":777},{"className":776},[],[778],{"type":46,"value":779},"agent_instructions",{"type":46,"value":781}," finding, follow the inline AGENTS.md generation in the ",{"type":40,"tag":53,"props":783,"children":785},{"className":784},[],[786],{"type":46,"value":779},{"type":46,"value":788}," section below — this applies in both auto and review modes.",{"type":40,"tag":49,"props":790,"children":791},{},[792],{"type":46,"value":793},"After processing, list what was applied, prompted, and skipped, then proceed to Step 6.",{"type":40,"tag":728,"props":795,"children":797},{"id":796},"review-mode",[798],{"type":46,"value":799},"Review mode",{"type":40,"tag":49,"props":801,"children":802},{},[803],{"type":46,"value":804},"For each finding:",{"type":40,"tag":62,"props":806,"children":809},{"className":807,"code":808,"language":46},[604],"[Tier \u003CN>] \u003Cattribute.name> — \u003Cscore>\u002F100\nEvidence: \u003Cevidence items>\n\nRemediation: \u003Cremediation.summary>\n\nApply this fix? [yes \u002F skip \u002F defer \u002F quit]\n",[810],{"type":40,"tag":53,"props":811,"children":812},{"__ignoreMap":67},[813],{"type":46,"value":808},{"type":40,"tag":49,"props":815,"children":816},{},[817,822,824,829,831,836,838,843],{"type":40,"tag":140,"props":818,"children":819},{},[820],{"type":46,"value":821},"yes",{"type":46,"value":823}," — apply the fix, then move to the next finding.\n",{"type":40,"tag":140,"props":825,"children":826},{},[827],{"type":46,"value":828},"skip",{"type":46,"value":830}," — move on; do not revisit. Use this if the finding doesn't apply to this repo.\n",{"type":40,"tag":140,"props":832,"children":833},{},[834],{"type":46,"value":835},"defer",{"type":46,"value":837}," — note it; surface again after re-run.\n",{"type":40,"tag":140,"props":839,"children":840},{},[841],{"type":46,"value":842},"quit",{"type":46,"value":844}," — stop immediately.",{"type":40,"tag":49,"props":846,"children":847},{},[848,853],{"type":40,"tag":140,"props":849,"children":850},{},[851],{"type":46,"value":852},"ADR and design intent findings:",{"type":46,"value":854}," Do not use JSON remediation. Ask instead:",{"type":40,"tag":622,"props":856,"children":857},{},[858],{"type":40,"tag":49,"props":859,"children":860},{},[861],{"type":46,"value":862},"\"Do you have any architectural decisions worth capturing? Describe the decision and rationale — I'll write the ADR. Skip to add manually later.\"",{"type":40,"tag":49,"props":864,"children":865},{},[866],{"type":46,"value":867},"Write only if the user provides input. Never invent rationale.",{"type":40,"tag":728,"props":869,"children":871},{"id":870},"agent_instructions-finding-both-modes",[872,877],{"type":40,"tag":53,"props":873,"children":875},{"className":874},[],[876],{"type":46,"value":779},{"type":46,"value":878}," finding (both modes)",{"type":40,"tag":49,"props":880,"children":881},{},[882,884,890,891,897],{"type":46,"value":883},"Generate ",{"type":40,"tag":53,"props":885,"children":887},{"className":886},[],[888],{"type":46,"value":889},"AGENTS.md",{"type":46,"value":681},{"type":40,"tag":53,"props":892,"children":894},{"className":893},[],[895],{"type":46,"value":896},"CLAUDE.md",{"type":46,"value":898}," inline — do not delegate to another skill.",{"type":40,"tag":49,"props":900,"children":901},{},[902],{"type":40,"tag":140,"props":903,"children":904},{},[905],{"type":46,"value":906},"Scan the repo for commands:",{"type":40,"tag":132,"props":908,"children":909},{},[910,929,948,985],{"type":40,"tag":136,"props":911,"children":912},{},[913,919,921,927],{"type":40,"tag":53,"props":914,"children":916},{"className":915},[],[917],{"type":46,"value":918},"package.json",{"type":46,"value":920}," → ",{"type":40,"tag":53,"props":922,"children":924},{"className":923},[],[925],{"type":46,"value":926},"scripts",{"type":46,"value":928}," entries (build, test, lint, typecheck, dev)",{"type":40,"tag":136,"props":930,"children":931},{},[932,938,940,946],{"type":40,"tag":53,"props":933,"children":935},{"className":934},[],[936],{"type":46,"value":937},"Makefile",{"type":46,"value":939}," \u002F ",{"type":40,"tag":53,"props":941,"children":943},{"className":942},[],[944],{"type":46,"value":945},"GNUmakefile",{"type":46,"value":947}," → targets",{"type":40,"tag":136,"props":949,"children":950},{},[951,957,958,964,965,971,972,978,979],{"type":40,"tag":53,"props":952,"children":954},{"className":953},[],[955],{"type":46,"value":956},"pyproject.toml",{"type":46,"value":920},{"type":40,"tag":53,"props":959,"children":961},{"className":960},[],[962],{"type":46,"value":963},"[tool.pytest]",{"type":46,"value":522},{"type":40,"tag":53,"props":966,"children":968},{"className":967},[],[969],{"type":46,"value":970},"[tool.ruff]",{"type":46,"value":522},{"type":40,"tag":53,"props":973,"children":975},{"className":974},[],[976],{"type":46,"value":977},"[tool.mypy]",{"type":46,"value":522},{"type":40,"tag":53,"props":980,"children":982},{"className":981},[],[983],{"type":46,"value":984},"[project.scripts]",{"type":40,"tag":136,"props":986,"children":987},{},[988,994,995,1001],{"type":40,"tag":53,"props":989,"children":991},{"className":990},[],[992],{"type":46,"value":993},".github\u002Fworkflows\u002F*.yml",{"type":46,"value":920},{"type":40,"tag":53,"props":996,"children":998},{"className":997},[],[999],{"type":46,"value":1000},"run:",{"type":46,"value":1002}," steps containing test\u002Flint\u002Fbuild\u002Ftypecheck keywords",{"type":40,"tag":49,"props":1004,"children":1005},{},[1006,1017,1019,1025],{"type":40,"tag":140,"props":1007,"children":1008},{},[1009,1010,1015],{"type":46,"value":711},{"type":40,"tag":53,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":46,"value":325},{"type":46,"value":1016}," is set:",{"type":46,"value":1018}," pull key paths, tech stack, conventions, and branching model directly from the matched ",{"type":40,"tag":53,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":46,"value":1024},"rhdh-repos.md",{"type":46,"value":1026}," entry — use these to pre-fill AGENTS.md sections and skip generic questions where RHDH context already answers them.",{"type":40,"tag":49,"props":1028,"children":1029},{},[1030,1035],{"type":40,"tag":140,"props":1031,"children":1032},{},[1033],{"type":46,"value":1034},"If not RHDH (or RHDH context doesn't cover it):",{"type":46,"value":1036}," ask these three questions one at a time:",{"type":40,"tag":1038,"props":1039,"children":1040},"ol",{},[1041,1046,1051],{"type":40,"tag":136,"props":1042,"children":1043},{},[1044],{"type":46,"value":1045},"\"What are 2-3 conventions an agent couldn't discover by reading the code? Skip if none.\"",{"type":40,"tag":136,"props":1047,"children":1048},{},[1049],{"type":46,"value":1050},"\"Any non-obvious architectural decisions or places where things live unexpectedly? Skip if obvious.\"",{"type":40,"tag":136,"props":1052,"children":1053},{},[1054],{"type":46,"value":1055},"\"Any commit format, CI checks, or PR conventions agents should know? Skip if standard.\"",{"type":40,"tag":49,"props":1057,"children":1058},{},[1059,1061,1066],{"type":46,"value":1060},"Write ",{"type":40,"tag":53,"props":1062,"children":1064},{"className":1063},[],[1065],{"type":46,"value":889},{"type":46,"value":745},{"type":40,"tag":62,"props":1068,"children":1072},{"className":1069,"code":1070,"language":1071,"meta":67,"style":67},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# \u003Crepo-name>\n\n## Build & Test Commands\n- Build: `\u003Ccommand>`\n- Test all: `\u003Ccommand>`\n- Test single file: `\u003Ccommand>`\n- Lint: `\u003Ccommand>`\n- Type check: `\u003Ccommand>`\n\n## Key Conventions\n\u003Cfrom scan + questions\u002Frhdh_context>\n\n## Architecture\n\u003Cfrom questions\u002Frhdh_context — omit if nothing to say>\n\n## PR Conventions\n- Agent-assisted commits should include an `Assisted-by: \u003Cmodel>` footer\n\u003Cfrom questions>\n","markdown",[1073],{"type":40,"tag":53,"props":1074,"children":1075},{"__ignoreMap":67},[1076,1089,1098,1111,1139,1164,1189,1214,1239,1247,1260,1269,1277,1290,1299,1306,1319,1350],{"type":40,"tag":73,"props":1077,"children":1078},{"class":75,"line":76},[1079,1084],{"type":40,"tag":73,"props":1080,"children":1081},{"style":262},[1082],{"type":46,"value":1083},"# ",{"type":40,"tag":73,"props":1085,"children":1086},{"style":80},[1087],{"type":46,"value":1088},"\u003Crepo-name>\n",{"type":40,"tag":73,"props":1090,"children":1091},{"class":75,"line":385},[1092],{"type":40,"tag":73,"props":1093,"children":1095},{"emptyLinePlaceholder":1094},true,[1096],{"type":46,"value":1097},"\n",{"type":40,"tag":73,"props":1099,"children":1100},{"class":75,"line":423},[1101,1106],{"type":40,"tag":73,"props":1102,"children":1103},{"style":262},[1104],{"type":46,"value":1105},"## ",{"type":40,"tag":73,"props":1107,"children":1108},{"style":80},[1109],{"type":46,"value":1110},"Build & Test Commands\n",{"type":40,"tag":73,"props":1112,"children":1113},{"class":75,"line":451},[1114,1119,1124,1129,1134],{"type":40,"tag":73,"props":1115,"children":1116},{"style":262},[1117],{"type":46,"value":1118},"-",{"type":40,"tag":73,"props":1120,"children":1121},{"style":273},[1122],{"type":46,"value":1123}," Build: ",{"type":40,"tag":73,"props":1125,"children":1126},{"style":262},[1127],{"type":46,"value":1128},"`",{"type":40,"tag":73,"props":1130,"children":1131},{"style":85},[1132],{"type":46,"value":1133},"\u003Ccommand>",{"type":40,"tag":73,"props":1135,"children":1136},{"style":262},[1137],{"type":46,"value":1138},"`\n",{"type":40,"tag":73,"props":1140,"children":1142},{"class":75,"line":1141},5,[1143,1147,1152,1156,1160],{"type":40,"tag":73,"props":1144,"children":1145},{"style":262},[1146],{"type":46,"value":1118},{"type":40,"tag":73,"props":1148,"children":1149},{"style":273},[1150],{"type":46,"value":1151}," Test all: ",{"type":40,"tag":73,"props":1153,"children":1154},{"style":262},[1155],{"type":46,"value":1128},{"type":40,"tag":73,"props":1157,"children":1158},{"style":85},[1159],{"type":46,"value":1133},{"type":40,"tag":73,"props":1161,"children":1162},{"style":262},[1163],{"type":46,"value":1138},{"type":40,"tag":73,"props":1165,"children":1167},{"class":75,"line":1166},6,[1168,1172,1177,1181,1185],{"type":40,"tag":73,"props":1169,"children":1170},{"style":262},[1171],{"type":46,"value":1118},{"type":40,"tag":73,"props":1173,"children":1174},{"style":273},[1175],{"type":46,"value":1176}," Test single file: ",{"type":40,"tag":73,"props":1178,"children":1179},{"style":262},[1180],{"type":46,"value":1128},{"type":40,"tag":73,"props":1182,"children":1183},{"style":85},[1184],{"type":46,"value":1133},{"type":40,"tag":73,"props":1186,"children":1187},{"style":262},[1188],{"type":46,"value":1138},{"type":40,"tag":73,"props":1190,"children":1192},{"class":75,"line":1191},7,[1193,1197,1202,1206,1210],{"type":40,"tag":73,"props":1194,"children":1195},{"style":262},[1196],{"type":46,"value":1118},{"type":40,"tag":73,"props":1198,"children":1199},{"style":273},[1200],{"type":46,"value":1201}," Lint: ",{"type":40,"tag":73,"props":1203,"children":1204},{"style":262},[1205],{"type":46,"value":1128},{"type":40,"tag":73,"props":1207,"children":1208},{"style":85},[1209],{"type":46,"value":1133},{"type":40,"tag":73,"props":1211,"children":1212},{"style":262},[1213],{"type":46,"value":1138},{"type":40,"tag":73,"props":1215,"children":1217},{"class":75,"line":1216},8,[1218,1222,1227,1231,1235],{"type":40,"tag":73,"props":1219,"children":1220},{"style":262},[1221],{"type":46,"value":1118},{"type":40,"tag":73,"props":1223,"children":1224},{"style":273},[1225],{"type":46,"value":1226}," Type check: ",{"type":40,"tag":73,"props":1228,"children":1229},{"style":262},[1230],{"type":46,"value":1128},{"type":40,"tag":73,"props":1232,"children":1233},{"style":85},[1234],{"type":46,"value":1133},{"type":40,"tag":73,"props":1236,"children":1237},{"style":262},[1238],{"type":46,"value":1138},{"type":40,"tag":73,"props":1240,"children":1242},{"class":75,"line":1241},9,[1243],{"type":40,"tag":73,"props":1244,"children":1245},{"emptyLinePlaceholder":1094},[1246],{"type":46,"value":1097},{"type":40,"tag":73,"props":1248,"children":1250},{"class":75,"line":1249},10,[1251,1255],{"type":40,"tag":73,"props":1252,"children":1253},{"style":262},[1254],{"type":46,"value":1105},{"type":40,"tag":73,"props":1256,"children":1257},{"style":80},[1258],{"type":46,"value":1259},"Key Conventions\n",{"type":40,"tag":73,"props":1261,"children":1263},{"class":75,"line":1262},11,[1264],{"type":40,"tag":73,"props":1265,"children":1266},{"style":273},[1267],{"type":46,"value":1268},"\u003Cfrom scan + questions\u002Frhdh_context>\n",{"type":40,"tag":73,"props":1270,"children":1272},{"class":75,"line":1271},12,[1273],{"type":40,"tag":73,"props":1274,"children":1275},{"emptyLinePlaceholder":1094},[1276],{"type":46,"value":1097},{"type":40,"tag":73,"props":1278,"children":1280},{"class":75,"line":1279},13,[1281,1285],{"type":40,"tag":73,"props":1282,"children":1283},{"style":262},[1284],{"type":46,"value":1105},{"type":40,"tag":73,"props":1286,"children":1287},{"style":80},[1288],{"type":46,"value":1289},"Architecture\n",{"type":40,"tag":73,"props":1291,"children":1293},{"class":75,"line":1292},14,[1294],{"type":40,"tag":73,"props":1295,"children":1296},{"style":273},[1297],{"type":46,"value":1298},"\u003Cfrom questions\u002Frhdh_context — omit if nothing to say>\n",{"type":40,"tag":73,"props":1300,"children":1301},{"class":75,"line":23},[1302],{"type":40,"tag":73,"props":1303,"children":1304},{"emptyLinePlaceholder":1094},[1305],{"type":46,"value":1097},{"type":40,"tag":73,"props":1307,"children":1309},{"class":75,"line":1308},16,[1310,1314],{"type":40,"tag":73,"props":1311,"children":1312},{"style":262},[1313],{"type":46,"value":1105},{"type":40,"tag":73,"props":1315,"children":1316},{"style":80},[1317],{"type":46,"value":1318},"PR Conventions\n",{"type":40,"tag":73,"props":1320,"children":1322},{"class":75,"line":1321},17,[1323,1327,1332,1336,1341,1345],{"type":40,"tag":73,"props":1324,"children":1325},{"style":262},[1326],{"type":46,"value":1118},{"type":40,"tag":73,"props":1328,"children":1329},{"style":273},[1330],{"type":46,"value":1331}," Agent-assisted commits should include an ",{"type":40,"tag":73,"props":1333,"children":1334},{"style":262},[1335],{"type":46,"value":1128},{"type":40,"tag":73,"props":1337,"children":1338},{"style":85},[1339],{"type":46,"value":1340},"Assisted-by: \u003Cmodel>",{"type":40,"tag":73,"props":1342,"children":1343},{"style":262},[1344],{"type":46,"value":1128},{"type":40,"tag":73,"props":1346,"children":1347},{"style":273},[1348],{"type":46,"value":1349}," footer\n",{"type":40,"tag":73,"props":1351,"children":1353},{"class":75,"line":1352},18,[1354],{"type":40,"tag":73,"props":1355,"children":1356},{"style":273},[1357],{"type":46,"value":1358},"\u003Cfrom questions>\n",{"type":40,"tag":49,"props":1360,"children":1361},{},[1362,1363,1368,1370],{"type":46,"value":1060},{"type":40,"tag":53,"props":1364,"children":1366},{"className":1365},[],[1367],{"type":46,"value":896},{"type":46,"value":1369}," with exactly: ",{"type":40,"tag":53,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":46,"value":1375},"@AGENTS.md",{"type":40,"tag":49,"props":1377,"children":1378},{},[1379],{"type":46,"value":1380},"Omit any section — including its header — where there is nothing to say. Do not invent content.",{"type":40,"tag":728,"props":1382,"children":1384},{"id":1383},"applying-other-fixes-both-modes",[1385],{"type":46,"value":1386},"Applying other fixes (both modes)",{"type":40,"tag":49,"props":1388,"children":1389},{},[1390,1392,1398,1399,1405,1407,1413],{"type":46,"value":1391},"Use ",{"type":40,"tag":53,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":46,"value":1397},"remediation.steps",{"type":46,"value":522},{"type":40,"tag":53,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":46,"value":1404},"remediation.commands",{"type":46,"value":1406},", and ",{"type":40,"tag":53,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":46,"value":1412},"remediation.examples",{"type":46,"value":1414}," from the JSON. Do not invent steps beyond what the JSON provides.",{"type":40,"tag":41,"props":1416,"children":1418},{"id":1417},"step-6-re-run-and-present-results",[1419],{"type":46,"value":1420},"Step 6: Re-run and present results",{"type":40,"tag":62,"props":1422,"children":1423},{"className":64,"code":345,"language":66,"meta":67,"style":67},[1424],{"type":40,"tag":53,"props":1425,"children":1426},{"__ignoreMap":67},[1427,1454,1485,1508],{"type":40,"tag":73,"props":1428,"children":1429},{"class":75,"line":76},[1430,1434,1438,1442,1446,1450],{"type":40,"tag":73,"props":1431,"children":1432},{"style":273},[1433],{"type":46,"value":357},{"type":40,"tag":73,"props":1435,"children":1436},{"style":262},[1437],{"type":46,"value":362},{"type":40,"tag":73,"props":1439,"children":1440},{"style":80},[1441],{"type":46,"value":367},{"type":40,"tag":73,"props":1443,"children":1444},{"style":85},[1445],{"type":46,"value":372},{"type":40,"tag":73,"props":1447,"children":1448},{"style":262},[1449],{"type":46,"value":377},{"type":40,"tag":73,"props":1451,"children":1452},{"style":223},[1453],{"type":46,"value":382},{"type":40,"tag":73,"props":1455,"children":1456},{"class":75,"line":385},[1457,1461,1465,1469,1473,1477,1481],{"type":40,"tag":73,"props":1458,"children":1459},{"style":80},[1460],{"type":46,"value":58},{"type":40,"tag":73,"props":1462,"children":1463},{"style":85},[1464],{"type":46,"value":395},{"type":40,"tag":73,"props":1466,"children":1467},{"style":85},[1468],{"type":46,"value":400},{"type":40,"tag":73,"props":1470,"children":1471},{"style":85},[1472],{"type":46,"value":405},{"type":40,"tag":73,"props":1474,"children":1475},{"style":85},[1476],{"type":46,"value":410},{"type":40,"tag":73,"props":1478,"children":1479},{"style":85},[1480],{"type":46,"value":415},{"type":40,"tag":73,"props":1482,"children":1483},{"style":273},[1484],{"type":46,"value":420},{"type":40,"tag":73,"props":1486,"children":1487},{"class":75,"line":423},[1488,1492,1496,1500,1504],{"type":40,"tag":73,"props":1489,"children":1490},{"style":85},[1491],{"type":46,"value":429},{"type":40,"tag":73,"props":1493,"children":1494},{"style":262},[1495],{"type":46,"value":434},{"type":40,"tag":73,"props":1497,"children":1498},{"style":273},[1499],{"type":46,"value":439},{"type":40,"tag":73,"props":1501,"children":1502},{"style":262},[1503],{"type":46,"value":444},{"type":40,"tag":73,"props":1505,"children":1506},{"style":273},[1507],{"type":46,"value":420},{"type":40,"tag":73,"props":1509,"children":1510},{"class":75,"line":451},[1511,1515,1519,1523],{"type":40,"tag":73,"props":1512,"children":1513},{"style":262},[1514],{"type":46,"value":457},{"type":40,"tag":73,"props":1516,"children":1517},{"style":85},[1518],{"type":46,"value":270},{"type":40,"tag":73,"props":1520,"children":1521},{"style":273},[1522],{"type":46,"value":276},{"type":40,"tag":73,"props":1524,"children":1525},{"style":262},[1526],{"type":46,"value":470},{"type":40,"tag":49,"props":1528,"children":1529},{},[1530],{"type":46,"value":1531},"Show before\u002Fafter:",{"type":40,"tag":62,"props":1533,"children":1536},{"className":1534,"code":1535,"language":46},[604],"Before: \u003Cold_score>\u002F100 (\u003Cold_certification_level>)\nAfter:  \u003Cnew_score>\u002F100 (\u003Cnew_certification_level>)\n\nRemaining failures: \u003CN> findings\n",[1537],{"type":40,"tag":53,"props":1538,"children":1539},{"__ignoreMap":67},[1540],{"type":46,"value":1535},{"type":40,"tag":49,"props":1542,"children":1543},{},[1544],{"type":46,"value":1545},"If remaining failures (including deferred), ask: \"Would you like to continue addressing the remaining findings?\" If yes, repeat Step 5.",{"type":40,"tag":41,"props":1547,"children":1549},{"id":1548},"batch-mode",[1550],{"type":46,"value":1551},"Batch mode",{"type":40,"tag":49,"props":1553,"children":1554},{},[1555],{"type":46,"value":1556},"When the user selects batch assessment:",{"type":40,"tag":1038,"props":1558,"children":1559},{},[1560,1573],{"type":40,"tag":136,"props":1561,"children":1562},{},[1563,1565,1571],{"type":46,"value":1564},"Ask: \"What directory are your RHDH repos cloned into? (e.g. ",{"type":40,"tag":53,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":46,"value":1570},"~\u002Fgit",{"type":46,"value":1572},")\"",{"type":40,"tag":136,"props":1574,"children":1575},{},[1576],{"type":46,"value":1577},"Find subdirectories that are git repos:",{"type":40,"tag":62,"props":1579,"children":1581},{"className":64,"code":1580,"language":66,"meta":67,"style":67},"find \u003Cdir> -maxdepth 2 -name \".git\" -type d | sed 's|\u002F.git||'\n",[1582],{"type":40,"tag":53,"props":1583,"children":1584},{"__ignoreMap":67},[1585],{"type":40,"tag":73,"props":1586,"children":1587},{"class":75,"line":76},[1588,1593,1597,1602,1607,1611,1616,1622,1627,1631,1636,1640,1645,1650,1655,1660,1665,1670],{"type":40,"tag":73,"props":1589,"children":1590},{"style":80},[1591],{"type":46,"value":1592},"find",{"type":40,"tag":73,"props":1594,"children":1595},{"style":262},[1596],{"type":46,"value":265},{"type":40,"tag":73,"props":1598,"children":1599},{"style":85},[1600],{"type":46,"value":1601},"di",{"type":40,"tag":73,"props":1603,"children":1604},{"style":273},[1605],{"type":46,"value":1606},"r",{"type":40,"tag":73,"props":1608,"children":1609},{"style":262},[1610],{"type":46,"value":281},{"type":40,"tag":73,"props":1612,"children":1613},{"style":85},[1614],{"type":46,"value":1615}," -maxdepth",{"type":40,"tag":73,"props":1617,"children":1619},{"style":1618},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1620],{"type":46,"value":1621}," 2",{"type":40,"tag":73,"props":1623,"children":1624},{"style":85},[1625],{"type":46,"value":1626}," -name",{"type":40,"tag":73,"props":1628,"children":1629},{"style":262},[1630],{"type":46,"value":434},{"type":40,"tag":73,"props":1632,"children":1633},{"style":85},[1634],{"type":46,"value":1635},".git",{"type":40,"tag":73,"props":1637,"children":1638},{"style":262},[1639],{"type":46,"value":444},{"type":40,"tag":73,"props":1641,"children":1642},{"style":85},[1643],{"type":46,"value":1644}," -type",{"type":40,"tag":73,"props":1646,"children":1647},{"style":85},[1648],{"type":46,"value":1649}," d",{"type":40,"tag":73,"props":1651,"children":1652},{"style":262},[1653],{"type":46,"value":1654}," |",{"type":40,"tag":73,"props":1656,"children":1657},{"style":80},[1658],{"type":46,"value":1659}," sed",{"type":40,"tag":73,"props":1661,"children":1662},{"style":262},[1663],{"type":46,"value":1664}," '",{"type":40,"tag":73,"props":1666,"children":1667},{"style":85},[1668],{"type":46,"value":1669},"s|\u002F.git||",{"type":40,"tag":73,"props":1671,"children":1672},{"style":262},[1673],{"type":46,"value":1674},"'\n",{"type":40,"tag":1038,"props":1676,"children":1677},{"start":423},[1678,1690,1695],{"type":40,"tag":136,"props":1679,"children":1680},{},[1681,1683,1688],{"type":46,"value":1682},"For each, check if the remote URL matches a repo in ",{"type":40,"tag":53,"props":1684,"children":1686},{"className":1685},[],[1687],{"type":46,"value":1024},{"type":46,"value":1689},". Assess only matching repos.",{"type":40,"tag":136,"props":1691,"children":1692},{},[1693],{"type":46,"value":1694},"Run the assessment on each matched repo (Step 3) and collect results.",{"type":40,"tag":136,"props":1696,"children":1697},{},[1698],{"type":46,"value":1699},"Present a summary table:",{"type":40,"tag":62,"props":1701,"children":1704},{"className":1702,"code":1703,"language":46},[604],"Repo                        Score   Level              Failing\nrhdh                        72\u002F100  Bronze             4\nrhdh-operator               45\u002F100  Needs Improvement  11\nrhdh-plugins                88\u002F100  Silver             1\n",[1705],{"type":40,"tag":53,"props":1706,"children":1707},{"__ignoreMap":67},[1708],{"type":46,"value":1703},{"type":40,"tag":1038,"props":1710,"children":1711},{"start":1166},[1712],{"type":40,"tag":136,"props":1713,"children":1714},{},[1715],{"type":46,"value":1716},"Ask: \"Would you like to address findings for any of these repos?\" If yes, the user picks one — run Step 3 (assessment) on that repo to get fresh findings, then run Steps 4–6 for it.",{"type":40,"tag":41,"props":1718,"children":1720},{"id":1719},"gotchas",[1721],{"type":46,"value":1722},"Gotchas",{"type":40,"tag":132,"props":1724,"children":1725},{},[1726,1738,1743,1753,1758,1763,1775],{"type":40,"tag":136,"props":1727,"children":1728},{},[1729,1731,1736],{"type":46,"value":1730},"The first ",{"type":40,"tag":53,"props":1732,"children":1734},{"className":1733},[],[1735],{"type":46,"value":58},{"type":46,"value":1737}," run fetches and builds agentready from GitHub — this can take 30–60 seconds. Subsequent runs use the cache. If the fetch fails, stop — do not proceed without a valid report.",{"type":40,"tag":136,"props":1739,"children":1740},{},[1741],{"type":46,"value":1742},"Do not output the report to the repository directory — use the temp dir to avoid polluting the working tree.",{"type":40,"tag":136,"props":1744,"children":1745},{},[1746,1751],{"type":40,"tag":53,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":46,"value":679},{"type":46,"value":1752}," findings reflect the detected language stack; do not mention them unless the user asks.",{"type":40,"tag":136,"props":1754,"children":1755},{},[1756],{"type":46,"value":1757},"Deferred findings surface again after the re-run.",{"type":40,"tag":136,"props":1759,"children":1760},{},[1761],{"type":46,"value":1762},"Never invent rationale for ADRs or design docs. In auto mode, skip them. In review mode, ask for rationale before writing anything.",{"type":40,"tag":136,"props":1764,"children":1765},{},[1766,1768,1773],{"type":46,"value":1767},"In batch mode, only assess repos whose remote URL matches ",{"type":40,"tag":53,"props":1769,"children":1771},{"className":1770},[],[1772],{"type":46,"value":1024},{"type":46,"value":1774}," — do not assess unrelated repos in the same directory.",{"type":40,"tag":136,"props":1776,"children":1777},{},[1778,1783,1785,1790,1792,1798,1800,1806],{"type":40,"tag":53,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":46,"value":1024},{"type":46,"value":1784}," is expected at ",{"type":40,"tag":53,"props":1786,"children":1788},{"className":1787},[],[1789],{"type":46,"value":317},{"type":46,"value":1791}," — the default install path when using ",{"type":40,"tag":53,"props":1793,"children":1795},{"className":1794},[],[1796],{"type":46,"value":1797},"npx skills add redhat-developer\u002Frhdh-skill",{"type":46,"value":1799},". If the ",{"type":40,"tag":53,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":46,"value":1805},"rhdh",{"type":46,"value":1807}," skill was installed to a different prefix, RHDH detection will silently degrade to generic mode. This is by design — no error, no warning.",{"type":40,"tag":1809,"props":1810,"children":1811},"style",{},[1812],{"type":46,"value":1813},"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":1815,"total":1918},[1816,1822,1836,1855,1871,1888,1899],{"slug":4,"name":4,"fn":5,"description":6,"org":1817,"tags":1818,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1819,1820,1821],{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":1823,"name":1823,"fn":1824,"description":1825,"org":1826,"tags":1827,"stars":23,"repoUrl":24,"updatedAt":1835},"backstage-upgrade","upgrade Backstage dependencies","Upgrade @backstage\u002F* dependencies in a plugin or app to a target version. Use when asked to \"upgrade backstage\", \"bump backstage\", \"update @backstage\", \"align backstage deps\", \"backstage version bump\", \"upgrade dependencies\", \"backstage-cli versions:bump\", \"update to latest backstage\", \"fix version mismatch\", \"backstage version alignment\", \"upgrade before migration\", or any request to update Backstage package versions in a project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1828,1829,1832],{"name":18,"slug":19,"type":16},{"name":1830,"slug":1831,"type":16},"Maintenance","maintenance",{"name":1833,"slug":1834,"type":16},"Migration","migration","2026-07-16T06:03:24.067361",{"slug":1837,"name":1837,"fn":1838,"description":1839,"org":1840,"tags":1841,"stars":23,"repoUrl":24,"updatedAt":1854},"base-images-and-rpms","update base images and lockfiles","Updates base images with updateBaseImages.sh and regenerates rpms.lock.yaml with rpm-lockfile-prototype in redhat-developer\u002Frhdh, rhdh-must-gather, and rhdh-operator. Use --analyze for read-only Containerfile\u002FDockerfile scan (current vs latest tags, UBI skew). Use for weekly upstream maintenance, UBI\u002FRHEL base image bumps, RPM lockfile refresh, base-images-and-rpms, main, release-*, or analyzing base images before updating.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1842,1845,1848,1851],{"name":1843,"slug":1844,"type":16},"Automation","automation",{"name":1846,"slug":1847,"type":16},"Configuration","configuration",{"name":1849,"slug":1850,"type":16},"Containers","containers",{"name":1852,"slug":1853,"type":16},"Deployment","deployment","2026-07-16T06:03:27.784453",{"slug":1856,"name":1856,"fn":1857,"description":1858,"org":1859,"tags":1860,"stars":23,"repoUrl":24,"updatedAt":1870},"bug-fix","diagnose and fix plugin bugs","Reproduce, diagnose, fix, and PR plugin bugs from Jira tickets or GitHub issues. Works with both rhdh-plugins and community-plugins. Supports UI bugs (Playwright e2e with before\u002Fafter recordings) and backend bugs (unit\u002Fintegration test verification). Triages issues for agent-readiness before attempting a fix. Accepts a Jira key (RHDHBUGS-1934), Jira URL (redhat.atlassian.net\u002Fbrowse\u002F...), GitHub issue URL (github.com\u002F...\u002Fissues\u002FN), or a request to \"fix this bug\", \"reproduce and fix\", \"\u002Fbug-fix\". By default, stops after the fix for user verification before PR creation. Supports --no-verify mode to skip the verification gate and auto-create the PR. Chains into raise-pr for the full PR lifecycle.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1861,1864,1867],{"name":1862,"slug":1863,"type":16},"Debugging","debugging",{"name":1865,"slug":1866,"type":16},"QA","qa",{"name":1868,"slug":1869,"type":16},"Testing","testing","2026-07-29T06:00:33.054762",{"slug":1872,"name":1872,"fn":1873,"description":1874,"org":1875,"tags":1876,"stars":23,"repoUrl":24,"updatedAt":1887},"compute-plugin-package-overlay-cve-list","generate CVE management reports","Builds an RHDH CVE Management CSV from GA plugin workspace changes in rhdh-plugin-export-overlays since a version tag (patches, source.json, plugins-list). One row per CVE × plugins-list package (multi-workspace CVEs expand). Use for \"CVE CSV\", \"workspace CVEs since tag\", \"collect overlay CVEs\", \"CVE management CSV\", orchestrator\u002Flightspeed CVE review, or plugin package overlay CVE list.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1877,1880,1881,1884],{"name":1878,"slug":1879,"type":16},"Compliance","compliance",{"name":18,"slug":19,"type":16},{"name":1882,"slug":1883,"type":16},"Reporting","reporting",{"name":1885,"slug":1886,"type":16},"Security","security","2026-08-01T05:41:57.852801",{"slug":1889,"name":1889,"fn":1890,"description":1891,"org":1892,"tags":1893,"stars":23,"repoUrl":24,"updatedAt":1898},"create-plugin","scaffold and package RHDH dynamic plugins","Full lifecycle for RHDH dynamic plugins — scaffold, implement, export, package, and configure. Use when asked to \"create RHDH plugin\", \"bootstrap dynamic plugin\", \"create backend plugin\", \"create frontend plugin\", \"export dynamic plugin\", \"package plugin as OCI\", \"generate frontend wiring\", \"create plugin container image\", \"configure mount points\", \"create dynamic route\", \"add entity card\", \"scaffold RHDH plugin\", \"publish plugin to registry\", \"create tgz archive\", or mentions creating, exporting, packaging, or wiring a Backstage plugin for Red Hat Developer Hub. Also use when asked to \"build a plugin from scratch\", \"dynamic plugin tutorial\", \"RHDH plugin from scratch\", or \"build Backstage plugin for RHDH\". Covers backend plugins (APIs, scaffolder actions, processors), frontend plugins (pages, cards, themes), export\u002Fpackaging (OCI, tgz, npm), and frontend wiring configuration (mount points, routes, entity tabs, themes).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1894,1895],{"name":1852,"slug":1853,"type":16},{"name":1896,"slug":1897,"type":16},"Plugin Development","plugin-development","2026-07-16T06:02:28.983498",{"slug":1900,"name":1900,"fn":1901,"description":1902,"org":1903,"tags":1904,"stars":23,"repoUrl":24,"updatedAt":1917},"cursor-mcp-auth","authenticate Atlassian MCP for Jira","Ensures Cursor Atlassian MCP (plugin-atlassian-atlassian → mcp.atlassian.com) is authenticated for redhat.atlassian.net via OAuth. Use for \"authenticate Jira\", \"Atlassian MCP\", \"jira auth failed\", \"mcp_auth Atlassian\", \"cursor MCP auth\", or when another skill needs working Jira access through Cursor MCP.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1905,1908,1911,1914],{"name":1906,"slug":1907,"type":16},"Auth","auth",{"name":1909,"slug":1910,"type":16},"Jira","jira",{"name":1912,"slug":1913,"type":16},"MCP","mcp",{"name":1915,"slug":1916,"type":16},"OAuth","oauth","2026-07-29T06:00:33.525179",24,{"items":1920,"total":1918},[1921,1927,1933,1940,1946,1953,1958,1965,1977,1990,2002,2014],{"slug":4,"name":4,"fn":5,"description":6,"org":1922,"tags":1923,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1924,1925,1926],{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":1823,"name":1823,"fn":1824,"description":1825,"org":1928,"tags":1929,"stars":23,"repoUrl":24,"updatedAt":1835},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1930,1931,1932],{"name":18,"slug":19,"type":16},{"name":1830,"slug":1831,"type":16},{"name":1833,"slug":1834,"type":16},{"slug":1837,"name":1837,"fn":1838,"description":1839,"org":1934,"tags":1935,"stars":23,"repoUrl":24,"updatedAt":1854},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1936,1937,1938,1939],{"name":1843,"slug":1844,"type":16},{"name":1846,"slug":1847,"type":16},{"name":1849,"slug":1850,"type":16},{"name":1852,"slug":1853,"type":16},{"slug":1856,"name":1856,"fn":1857,"description":1858,"org":1941,"tags":1942,"stars":23,"repoUrl":24,"updatedAt":1870},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1943,1944,1945],{"name":1862,"slug":1863,"type":16},{"name":1865,"slug":1866,"type":16},{"name":1868,"slug":1869,"type":16},{"slug":1872,"name":1872,"fn":1873,"description":1874,"org":1947,"tags":1948,"stars":23,"repoUrl":24,"updatedAt":1887},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1949,1950,1951,1952],{"name":1878,"slug":1879,"type":16},{"name":18,"slug":19,"type":16},{"name":1882,"slug":1883,"type":16},{"name":1885,"slug":1886,"type":16},{"slug":1889,"name":1889,"fn":1890,"description":1891,"org":1954,"tags":1955,"stars":23,"repoUrl":24,"updatedAt":1898},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1956,1957],{"name":1852,"slug":1853,"type":16},{"name":1896,"slug":1897,"type":16},{"slug":1900,"name":1900,"fn":1901,"description":1902,"org":1959,"tags":1960,"stars":23,"repoUrl":24,"updatedAt":1917},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1961,1962,1963,1964],{"name":1906,"slug":1907,"type":16},{"name":1909,"slug":1910,"type":16},{"name":1912,"slug":1913,"type":16},{"name":1915,"slug":1916,"type":16},{"slug":1966,"name":1966,"fn":1967,"description":1968,"org":1969,"tags":1970,"stars":23,"repoUrl":24,"updatedAt":1976},"konflux-release-data-rpa","update release tags in konflux-release-data","Bumps RHDH ReleasePlanAdmission tag versions in konflux-release-data for a stream release (e.g. 1.9.7), opens a GitLab merge request, and launches it in the browser. Use when updating RPA tags, konflux-release-data, ReleasePlanAdmission, rhdh-1-9-*.yaml, rhdh-plugin-catalog-1-9-*.yaml, or preparing an RHDH patch release.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1971,1972,1973],{"name":1843,"slug":1844,"type":16},{"name":1852,"slug":1853,"type":16},{"name":1974,"slug":1975,"type":16},"GitLab","gitlab","2026-07-16T06:00:19.516231",{"slug":1978,"name":1978,"fn":1979,"description":1980,"org":1981,"tags":1982,"stars":23,"repoUrl":24,"updatedAt":1989},"konflux-tekton-updates","update Konflux Tekton task digests","Bumps Konflux Tekton task digests with .tekton\u002FupdateDigests.sh --minor --no-push, applies konflux-ci\u002Fbuild-definitions MIGRATION.md pipeline fixes, and regenerates PipelineRuns. Use for rhdh-plugin-catalog, RHDH midstream (4-rhdh), Konflux task minor bumps, prefetch-dependencies-oci-ta, build-image-index, or updateDigests.sh.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1983,1984,1987,1988],{"name":1843,"slug":1844,"type":16},{"name":1985,"slug":1986,"type":16},"CI\u002FCD","ci-cd",{"name":1852,"slug":1853,"type":16},{"name":18,"slug":19,"type":16},"2026-07-16T06:03:28.123118",{"slug":1991,"name":1991,"fn":1992,"description":1993,"org":1994,"tags":1995,"stars":23,"repoUrl":24,"updatedAt":2001},"lifecycle","check Red Hat product lifecycle status","Check version lifecycle and support status for platforms and integrations used by RHDH. Covers OCP, AKS, EKS, GKE, RHDH releases, RHBK, Quay, PostgreSQL, and any Red Hat product via the Product Life Cycles API. Use when asking about version support, EOL dates, GA dates, support phases, or planning version upgrades. Also use for \"is X still supported\", \"what versions should we test\", or \"when does X reach EOL\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1996,1997,1998],{"name":1878,"slug":1879,"type":16},{"name":1830,"slug":1831,"type":16},{"name":1999,"slug":2000,"type":16},"Operations","operations","2026-07-16T06:03:19.344038",{"slug":2003,"name":2003,"fn":2004,"description":2005,"org":2006,"tags":2007,"stars":23,"repoUrl":24,"updatedAt":2013},"nfs-migration","migrate plugins to New Frontend System","Migrate Backstage frontend plugins from the legacy system to the New Frontend System (NFS). Use when asked to \"migrate to NFS\", \"new frontend system\", \"convert plugin to NFS\", \"createFrontendPlugin\", \"PageBlueprint\", \"ApiBlueprint\", \"SubPageBlueprint\", \"alpha to GA\", \"legacy to NFS\", \"frontend migration\", \"extension blueprints\", \"migrate frontend plugin\", \"NFS support\", \"graduate alpha\", or mentions migrating a Backstage plugin to the new frontend system for RHDH.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2008,2009,2012],{"name":18,"slug":19,"type":16},{"name":2010,"slug":2011,"type":16},"Frontend","frontend",{"name":1833,"slug":1834,"type":16},"2026-07-16T06:03:27.078987",{"slug":2015,"name":2015,"fn":2016,"description":2017,"org":2018,"tags":2019,"stars":23,"repoUrl":24,"updatedAt":2026},"overlay","manage RHDH plugin export overlays","Manages the rhdh-plugin-export-overlays repository — onboards plugins to the Extensions Catalog, updates plugin versions, fixes overlay build failures, triages and analyzes PRs, triggers publishes, and manages plugin workspaces. Use when working with overlays, importing plugins, debugging CI, checking PRs, bumping versions, or mentions \"Extensions Catalog\", \"overlay build failed\", \"plugin registry\", \"overlay PR\", \"overlay doctor\", \"plugin import\", \"add plugin to catalog\", \"onboard plugin\", or \"plugin workspace\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2020,2021,2024,2025],{"name":1843,"slug":1844,"type":16},{"name":2022,"slug":2023,"type":16},"Code Review","code-review",{"name":1852,"slug":1853,"type":16},{"name":18,"slug":19,"type":16},"2026-07-16T06:03:20.380044"]