[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CVWS6MWWH2ANAWQECX3MHV":3,"skill-same:01M6CVWS6MWWH2ANAWQECX3MHV":129},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":44,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M6CVWS6MWWH2ANAWQECX3MHV","bmad-eval-runner",null,"Run a skill's evals in a clean, isolated environment and report results. Use when the user wants to evaluate a skill, run evals, benchmark a skill, validate triggers, or grade skill outputs.","reformlab\u002FReformLab","reformlab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F264161760?v=4","01M6CVRNMTPJRX8QX0P5J8NRZ6","01M6CVRNS5KTS18YC3AZHP1BZ3",1,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31],"eval","runner","bmad eval runner","run evals","validate","run","benchmark","report","results","user","environment","use","evals","clean","2026-11-10 10:12:30",false,"---\nname: bmad-eval-runner\ndescription: Run a skill's evals in a clean, isolated environment and report results. Use when the user wants to evaluate a skill, run evals, benchmark a skill, validate triggers, or grade skill outputs.\n---\n\n# Skill Eval Runner\n\n## Overview\n\nRun a skill's evals in an environment that does not bleed in the user's global config, auto-memory, or ancestor `CLAUDE.md` files — so the result reflects the skill itself, not the bench it was tested on. Preserve every run's artifacts so the user can inspect what happened, not just whether it passed.\n\nTwo eval shapes are supported and run independently:\n\n- **Artifact evals** (`evals.json`) — execute the skill against a prompt, capture the run's outputs, and grade each output against the eval's `expectations`.\n- **Trigger evals** (`triggers.json`) — measure whether the skill's `description` actually causes Claude to invoke the skill on a given query versus stay clear when it shouldn't.\n\nYou are an experienced eval engineer. The user wants signal, not theatre. Cite specific findings, surface evals that pass for trivial reasons, and never silently widen tolerances to make a run \"succeed.\"\n\n## Args\n\n- Positional: a path to the skill being evaluated (directory containing `SKILL.md`).\n- `--evals \u003Cpath>` — explicit path to evals folder or a specific `evals.json` \u002F `triggers.json` file. If omitted, discover.\n- `--mode artifact|trigger|both` — which eval kind to run. Default: `both` if both files are found, else whichever exists.\n- `--isolation docker|local|auto` — sandbox strategy. Default: `auto` (Docker when available, otherwise local).\n- `--project-root \u003Cpath>` — root of the project the skill belongs to. Default: walk up from skill path looking for `_bmad\u002F` or `.git\u002F`.\n- `--output-dir \u003Cpath>` — where run folders are written. Default: `{bmad_builder_reports}\u002Feval-runs\u002F` if configured, else `~\u002Fbmad-evals\u002F`.\n- `--workers \u003Cn>` — parallel evals. Default: 4.\n- `--headless` \u002F `-H` — non-interactive; emit final JSON only.\n\n## On Activation\n\n1. Resolve config the same way `bmad-workflow-builder` does (`{project-root}\u002F_bmad\u002Fconfig.yaml` then `config.user.yaml`, falling back to `bmb\u002Fconfig.yaml`). Resolve `{user_name}`, `{communication_language}`, `{bmad_builder_reports}`. Apply throughout the session.\n\n2. If `--headless` was passed, set `{headless_mode}=true` and skip every confirmation below; pick the safest defaults and proceed.\n\n3. Locate the skill. Verify `\u003Cskill-path>\u002FSKILL.md` exists; halt with a clear error if it doesn't.\n\n4. Discover evals — see `## Eval Discovery` below.\n\n5. Choose isolation — see `## Isolation` below. On the first Docker run on this machine, the image will need to be built; surface that, ask once unless headless, then cache.\n\n6. Confirm the run summary with the user (skill, evals found, mode, isolation, output dir) unless headless. Then execute.\n\n## Eval Discovery\n\nLook in this order, taking the first match:\n\n1. `--evals` argument if provided. May point to a folder (containing `evals.json` and\u002For `triggers.json`) or a specific JSON file.\n2. `\u003Cskill-path>\u002Fevals\u002F` — colocated with the skill.\n3. `\u003Cskill-path>\u002F..\u002F..\u002Fevals\u002F\u003Cskill-name>\u002F` — sibling-of-parent layout (common in BMad modules where `evals\u002F` is excluded from distribution but lives next to `src\u002F`).\n4. `\u003Cproject-root>\u002Fevals\u002F\u003Cskill-name>\u002F` — top-level evals tree.\n5. `\u003Cproject-root>\u002Fevals\u002F**\u002F\u003Cskill-name>\u002F` — anywhere under project evals.\n\nSurface what you found and where. If no evals are discovered, halt with a clear message — do not attempt to fabricate evals.\n\n## Isolation\n\nRun each eval in a fresh workspace so memory, project CLAUDE.md, prior runs, and host shell config cannot bias the result. Two strategies, picked automatically by default:\n\n- **Docker** (preferred when available): each eval runs in a fresh container off `bmad-eval-runner:latest`. The host's `ANTHROPIC_API_KEY` is the only env passed in. The skill's project is bind-mounted read-only and copied into a writable scratch dir inside the container; `HOME` is a fresh in-container directory; there is no auto-memory and no host CLAUDE.md.\n\n- **Local fallback** (when Docker is unavailable or the user opts out): each eval runs in a fresh `~\u002Fbmad-evals\u002F\u003Crun-id>\u002F\u003Ceval-id>\u002Fworkspace\u002F` directory with `HOME=\u003Cworkspace>\u002F.home` overridden so global memory and global CLAUDE.md do not leak. The project is copied (or hardlinked where supported) into the workspace. Tell the user this is the active mode and acknowledge that local isolation is best-effort, not hermetic.\n\nThe first time Docker is selected on this machine, build the image — `python3 {skill-root}\u002Fscripts\u002Fdocker_setup.py --build` — and tell the user this is happening once.\n\nDetails and the exact mount layout live in `references\u002Fisolation.md`. Read that file when you need to debug an isolation issue or explain to the user what is being isolated.\n\n## Run Execution\n\nFor artifact evals, invoke `python3 {skill-root}\u002Fscripts\u002Frun_evals.py` with the resolved arguments. The script handles isolation per eval, runs `claude -p` in the sandbox with the eval's prompt and any staged fixture files, and writes a per-eval folder with `prompt.txt`, `transcript.jsonl`, `artifacts\u002F`, and `metrics.json`.\n\nFor trigger evals, invoke `python3 {skill-root}\u002Fscripts\u002Frun_triggers.py`. The script measures whether the skill's description causes the skill to fire for each query, with `runs-per-query` repeats for stability, and writes `triggers-result.json`. Trigger evals should run under Docker isolation when available — local mode can have the host's installed skills bleed in via cwd-based skill discovery, biasing the trigger signal. If Docker is unavailable, run trigger evals locally but say so explicitly.\n\nAfter artifact runs complete, grade each eval. Spawn a grader subagent per eval in parallel (Agent tool, prompt loaded from `{skill-root}\u002Fagents\u002Fgrader.md` plus the eval's `expectations` and the path to its outputs). Each grader writes `grading.json` next to the artifacts. The grader has license to flag weak assertions — relay that feedback to the user.\n\nAfter all grading is done, generate the aggregate report — `python3 {skill-root}\u002Fscripts\u002Fgenerate_report.py --run-dir \u003Crun-id>` — which produces `report.html`. Tell the user where the run folder is and where the HTML report is.\n\n## Outcomes\n\n- Every eval's prompt, transcript, artifacts, and grading land on disk and stay there. Nothing is silently cleaned up.\n- The run honestly reflects the skill's behavior in a clean room — not the behavior of the host shell with its memories and configs.\n- The user knows whether Docker or local was used and why.\n- Failures cite specific expectations and evidence; passes that look superficial are flagged, not papered over.\n\n## Constraints\n\n- **Artifacts are forever.** Never delete, overwrite, or rotate run folders. Disk usage is the user's call.\n- **Auth boundary is narrow.** On macOS, the host's Claude Code OAuth credential is staged into each isolated `.claude\u002F.credentials.json` so the subprocess can authenticate without inheriting host config. `ANTHROPIC_API_KEY`, if set, is also forwarded. Nothing else crosses.\n- **Trigger evals do not need real artifacts.** They use a stub command file and only measure description firing — keep them cheap and parallel.\n- **No silent fallbacks on grading.** If a grader subagent errors, mark that eval `grading_error` rather than substituting a default verdict.\n- **Stop when evals are missing.** If discovery returns nothing, halt with diagnostics — the runner does not invent test cases.\n","# Skill Eval Runner\n\n## Overview\n\nRun a skill's evals in an environment that does not bleed in the user's global config, auto-memory, or ancestor `CLAUDE.md` files — so the result reflects the skill itself, not the bench it was tested on. Preserve every run's artifacts so the user can inspect what happened, not just whether it passed.\n\nTwo eval shapes are supported and run independently:\n\n- **Artifact evals** (`evals.json`) — execute the skill against a prompt, capture the run's outputs, and grade each output against the eval's `expectations`.\n- **Trigger evals** (`triggers.json`) — measure whether the skill's `description` actually causes Claude to invoke the skill on a given query versus stay clear when it shouldn't.\n\nYou are an experienced eval engineer. The user wants signal, not theatre. Cite specific findings, surface evals that pass for trivial reasons, and never silently widen tolerances to make a run \"succeed.\"\n\n## Args\n\n- Positional: a path to the skill being evaluated (directory containing `SKILL.md`).\n- `--evals \u003Cpath>` — explicit path to evals folder or a specific `evals.json` \u002F `triggers.json` file. If omitted, discover.\n- `--mode artifact|trigger|both` — which eval kind to run. Default: `both` if both files are found, else whichever exists.\n- `--isolation docker|local|auto` — sandbox strategy. Default: `auto` (Docker when available, otherwise local).\n- `--project-root \u003Cpath>` — root of the project the skill belongs to. Default: walk up from skill path looking for `_bmad\u002F` or `.git\u002F`.\n- `--output-dir \u003Cpath>` — where run folders are written. Default: `{bmad_builder_reports}\u002Feval-runs\u002F` if configured, else `~\u002Fbmad-evals\u002F`.\n- `--workers \u003Cn>` — parallel evals. Default: 4.\n- `--headless` \u002F `-H` — non-interactive; emit final JSON only.\n\n## On Activation\n\n1. Resolve config the same way `bmad-workflow-builder` does (`{project-root}\u002F_bmad\u002Fconfig.yaml` then `config.user.yaml`, falling back to `bmb\u002Fconfig.yaml`). Resolve `{user_name}`, `{communication_language}`, `{bmad_builder_reports}`. Apply throughout the session.\n\n2. If `--headless` was passed, set `{headless_mode}=true` and skip every confirmation below; pick the safest defaults and proceed.\n\n3. Locate the skill. Verify `\u003Cskill-path>\u002FSKILL.md` exists; halt with a clear error if it doesn't.\n\n4. Discover evals — see `## Eval Discovery` below.\n\n5. Choose isolation — see `## Isolation` below. On the first Docker run on this machine, the image will need to be built; surface that, ask once unless headless, then cache.\n\n6. Confirm the run summary with the user (skill, evals found, mode, isolation, output dir) unless headless. Then execute.\n\n## Eval Discovery\n\nLook in this order, taking the first match:\n\n1. `--evals` argument if provided. May point to a folder (containing `evals.json` and\u002For `triggers.json`) or a specific JSON file.\n2. `\u003Cskill-path>\u002Fevals\u002F` — colocated with the skill.\n3. `\u003Cskill-path>\u002F..\u002F..\u002Fevals\u002F\u003Cskill-name>\u002F` — sibling-of-parent layout (common in BMad modules where `evals\u002F` is excluded from distribution but lives next to `src\u002F`).\n4. `\u003Cproject-root>\u002Fevals\u002F\u003Cskill-name>\u002F` — top-level evals tree.\n5. `\u003Cproject-root>\u002Fevals\u002F**\u002F\u003Cskill-name>\u002F` — anywhere under project evals.\n\nSurface what you found and where. If no evals are discovered, halt with a clear message — do not attempt to fabricate evals.\n\n## Isolation\n\nRun each eval in a fresh workspace so memory, project CLAUDE.md, prior runs, and host shell config cannot bias the result. Two strategies, picked automatically by default:\n\n- **Docker** (preferred when available): each eval runs in a fresh container off `bmad-eval-runner:latest`. The host's `ANTHROPIC_API_KEY` is the only env passed in. The skill's project is bind-mounted read-only and copied into a writable scratch dir inside the container; `HOME` is a fresh in-container directory; there is no auto-memory and no host CLAUDE.md.\n\n- **Local fallback** (when Docker is unavailable or the user opts out): each eval runs in a fresh `~\u002Fbmad-evals\u002F\u003Crun-id>\u002F\u003Ceval-id>\u002Fworkspace\u002F` directory with `HOME=\u003Cworkspace>\u002F.home` overridden so global memory and global CLAUDE.md do not leak. The project is copied (or hardlinked where supported) into the workspace. Tell the user this is the active mode and acknowledge that local isolation is best-effort, not hermetic.\n\nThe first time Docker is selected on this machine, build the image — `python3 {skill-root}\u002Fscripts\u002Fdocker_setup.py --build` — and tell the user this is happening once.\n\nDetails and the exact mount layout live in `references\u002Fisolation.md`. Read that file when you need to debug an isolation issue or explain to the user what is being isolated.\n\n## Run Execution\n\nFor artifact evals, invoke `python3 {skill-root}\u002Fscripts\u002Frun_evals.py` with the resolved arguments. The script handles isolation per eval, runs `claude -p` in the sandbox with the eval's prompt and any staged fixture files, and writes a per-eval folder with `prompt.txt`, `transcript.jsonl`, `artifacts\u002F`, and `metrics.json`.\n\nFor trigger evals, invoke `python3 {skill-root}\u002Fscripts\u002Frun_triggers.py`. The script measures whether the skill's description causes the skill to fire for each query, with `runs-per-query` repeats for stability, and writes `triggers-result.json`. Trigger evals should run under Docker isolation when available — local mode can have the host's installed skills bleed in via cwd-based skill discovery, biasing the trigger signal. If Docker is unavailable, run trigger evals locally but say so explicitly.\n\nAfter artifact runs complete, grade each eval. Spawn a grader subagent per eval in parallel (Agent tool, prompt loaded from `{skill-root}\u002Fagents\u002Fgrader.md` plus the eval's `expectations` and the path to its outputs). Each grader writes `grading.json` next to the artifacts. The grader has license to flag weak assertions — relay that feedback to the user.\n\nAfter all grading is done, generate the aggregate report — `python3 {skill-root}\u002Fscripts\u002Fgenerate_report.py --run-dir \u003Crun-id>` — which produces `report.html`. Tell the user where the run folder is and where the HTML report is.\n\n## Outcomes\n\n- Every eval's prompt, transcript, artifacts, and grading land on disk and stay there. Nothing is silently cleaned up.\n- The run honestly reflects the skill's behavior in a clean room — not the behavior of the host shell with its memories and configs.\n- The user knows whether Docker or local was used and why.\n- Failures cite specific expectations and evidence; passes that look superficial are flagged, not papered over.\n\n## Constraints\n\n- **Artifacts are forever.** Never delete, overwrite, or rotate run folders. Disk usage is the user's call.\n- **Auth boundary is narrow.** On macOS, the host's Claude Code OAuth credential is staged into each isolated `.claude\u002F.credentials.json` so the subprocess can authenticate without inheriting host config. `ANTHROPIC_API_KEY`, if set, is also forwarded. Nothing else crosses.\n- **Trigger evals do not need real artifacts.** They use a stub command file and only measure description firing — keep them cheap and parallel.\n- **No silent fallbacks on grading.** If a grader subagent errors, mark that eval `grading_error` rather than substituting a default verdict.\n- **Stop when evals are missing.** If discovery returns nothing, halt with diagnostics — the runner does not invent test cases.\n",{"name":5,"description":7},"master","314a64e40d9abca764698290593908a736500b30",".agents\u002Fskills\u002Fbmad-eval-runner",0,"https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab","https:\u002F\u002Fdocs.reform-lab.eu\u002F","https:\u002F\u002Fgithub.com\u002Freformlab","https:\u002F\u002Freform-lab.eu\u002F","See who your policy actually helps","2026-05-25 03:50:07",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add reformlab\u002FReformLab --skill bmad-eval-runner",{"tool":53,"command":54},"bunx","bunx skills add reformlab\u002FReformLab --skill bmad-eval-runner",{"tool":56,"command":57},"pnpm","pnpm dlx skills add reformlab\u002FReformLab --skill bmad-eval-runner","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002FSKILL.md",true,[61,67,71,77,81,85,89,93,97,101,105,109,113,117,121,125],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"agents\u002Fgrader.md","REFERENCE","参考文档",5828,"https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002Fagents\u002Fgrader.md",{"path":68,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":69,"sourceHtmlUrl":70},"APPLICATION-RECONNAISSANCE-METHODOLOGY.md",22933,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FAPPLICATION-RECONNAISSANCE-METHODOLOGY.md",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"assets\u002FDockerfile","ASSET","资产文件",659,"https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002Fassets\u002FDockerfile",{"path":78,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":79,"sourceHtmlUrl":80},"AutomatedTestingTools.md",9968,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FAutomatedTestingTools.md",{"path":82,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":83,"sourceHtmlUrl":84},"COMPREHENSIVE-ATTACK-TAXONOMY.md",48736,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FCOMPREHENSIVE-ATTACK-TAXONOMY.md",{"path":86,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":87,"sourceHtmlUrl":88},"DefenseMechanisms.md",10667,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FDefenseMechanisms.md",{"path":90,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":91,"sourceHtmlUrl":92},"QuickStartGuide.md",7652,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FQuickStartGuide.md",{"path":94,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":95,"sourceHtmlUrl":96},"README.md",9277,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FREADME.md",{"path":98,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Feval-formats.md",8110,"https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002Freferences\u002Feval-formats.md",{"path":102,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fisolation.md",6260,"https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fbmad-eval-runner\u002Freferences\u002Fisolation.md",{"path":106,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":107,"sourceHtmlUrl":108},"Reporting.md",11658,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FReporting.md",{"path":110,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":111,"sourceHtmlUrl":112},"Workflows\u002FCompleteAssessment.md",9357,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FWorkflows\u002FCompleteAssessment.md",{"path":114,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":115,"sourceHtmlUrl":116},"Workflows\u002FDirectInjectionTesting.md",6329,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FWorkflows\u002FDirectInjectionTesting.md",{"path":118,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":119,"sourceHtmlUrl":120},"Workflows\u002FIndirectInjectionTesting.md",8451,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FWorkflows\u002FIndirectInjectionTesting.md",{"path":122,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":123,"sourceHtmlUrl":124},"Workflows\u002FMultiStageAttacks.md",8625,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FWorkflows\u002FMultiStageAttacks.md",{"path":126,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":127,"sourceHtmlUrl":128},"Workflows\u002FReconnaissance.md",5695,"https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002FPersonal_AI_Infrastructure\u002FReleases\u002Fv4.0.2\u002F.claude\u002Fskills\u002FSecurity\u002FPromptInjection\u002FWorkflows\u002FReconnaissance.md",[130,155,169,193,209,224],{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":32},"01M6FQK4CGE9096SN2JRE7DA8H","bmad-assist-help","Explain how bmad-assist works in this project by inspecting the local bmad-assist config, sprint status, epics, state, runs, prompts, logs, and relevant source code. Use when the user asks how bmad-assist behaves, how it reads epics and stories, why a run resumed or failed, what files are authoritative, or to investigate bmad-assist execution in the current repo.","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F_bmad\u002Fcore\u002Fskills\u002Fbmad-assist-help\u002FSKILL.md",[],[137,138,139,140,23,141,142,143,144,145,146,147,148,149,150,29,151,152,153,154],"help","bmad","bmad assist help","config","investigate","code","state","logs","execution","relevant","how","why","explain","repo","files","local","project","sprint",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":32},"01M6FQK133CMP4ZT00TW6S7TB1","bmad-fix-ci","Diagnose and fix GitHub CI failures locally. Use when the user says 'fix ci' or 'fix ci failures'.","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F_bmad\u002Fbmm\u002Fskills\u002Fbmad-fix-ci\u002FSKILL.md",[],[162,138,163,164,165,27,29,166,167,168],"bmad fix ci","ci","fix ci","fix","diagnose","fix ci failures","github",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":180,"publishedAt":32},"01M6FQJW69SATT3C9741MT2KJH","bmad-workflow-builder","Builds, converts, and analyzes workflows and skills. Use when the user requests to \"build a workflow\", \"modify a workflow\", \"quality check workflow\", \"analyze skill\", or \"convert a skill\".","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.opencode\u002Fskills\u002Fbmad-workflow-builder\u002FSKILL.md",[175],{"categoryNo":176,"categoryName":177,"taxonomyType":178,"taxonomyTypeDesc":179},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[181,182,138,183,184,185,186,187,188,189,27,29,190,191,192],"bmad workflow builder","workflow","builder","workflow builder","workflows","convert","analyze","quality","check","build","quality check","requests",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":204,"publishedAt":32},"01M6FQJQMT5GW37ANR711FCBJR","bmad-validate-prd","Validate a PRD against standards. Use when the user says \"validate this PRD\" or \"run PRD validation\"","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.opencode\u002Fskills\u002Fbmad-validate-prd\u002FSKILL.md",[199],{"categoryNo":200,"categoryName":201,"taxonomyType":202,"taxonomyTypeDesc":203},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[138,205,206,22,27,23,207,29,208],"bmad validate prd","prd","validation","standards",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":218,"publishedAt":32},"01M6FQJMCSRVGCG65DAKKGW0M1","bmad-ux-designer","ux-designer agent","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.opencode\u002Fskills\u002Fbmad-ux-designer\u002FSKILL.md",[215],{"categoryNo":216,"categoryName":217,"taxonomyType":202,"taxonomyTypeDesc":203},"01JBSEEDCAT000000000000032","设计师",[138,219,220,221,222,223],"bmad ux designer","UX Designer","designer","bmad ux","ux",{"skillNo":225,"name":226,"nameZh":6,"description":227,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":228,"categories":229,"keywords":233,"publishedAt":32},"01M6FQJDFKBXTWMBJD29FAC8TA","bmad-testarch-trace","Generate traceability matrix and quality gate decision. Use when the user says \"lets create traceability matrix\" or \"I want to analyze test coverage\"","https:\u002F\u002Fgithub.com\u002Freformlab\u002FReformLab\u002Fblob\u002Fmaster\u002F.opencode\u002Fskills\u002Fbmad-testarch-trace\u002FSKILL.md",[230],{"categoryNo":231,"categoryName":232,"taxonomyType":178,"taxonomyTypeDesc":179},"01JBSEEDCAT000000000000008","测试与质量",[234,235,236,138,237,238,239,240,187,188,241,27,242,29,243,244,245],"trace","bmad testarch","bmad testarch trace","test","quality gate","create","generate","decision","coverage","test coverage","gate","traceability"]