[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6VBXK8V1YZB6DG1B9P3AX9D":3,"skill-same:01M6VBXK8V1YZB6DG1B9P3AX9D":63},{"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":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":13,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":62},"01M6VBXK8V1YZB6DG1B9P3AX9D","security-bounty-hunter",null,"Hunt for exploitable, bounty-worthy security issues in repositories. Focuses on remotely reachable vulnerabilities that qualify for real reports instead of noisy local-only findings.","sakamoto-family-smile\u002Fagent_monorepo","sakamoto-family-smile","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132812403?v=4","01M6RTAT3H8PMWX5SJ65KP3VYF","01M6RTAV321WB5RAHCWTZMX5CV",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fsecurity-bounty-hunter\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"security","security bounty hunter","hunter","bounty hunter","vulnerabilities","issues","direct","only","reports","hunt","local","adaptation","qualify","port","for","repositories","2026-11-10 10:12:30",false,"---\nname: fe-e2e\ndescription: \"Use after fe-review passes to validate user flows end-to-end in the browser.\"\nargument-hint: \"\u003Cfeature-name>\"\nuser-invocable: true\nallowed-tools: Read, Write, Glob, Grep, Bash, Agent\n---\n\n# E2E Testing Skill\n\nRun end-to-end tests on generated code. The runner is selected by `e2eTool` (default `agent-browser`): the **agent-browser** path starts a dev server with MSW mocks enabled and drives browser scenarios; the **playwright** path delegates the dev server to `playwright.config.ts` `webServer` and runs `npx playwright test`. Both realize the same tool-neutral `plan.json` `e2eTests[]` and write the same `e2e-report.json` schema.\n\n> **Tool choice**: This skill uses `Agent` (not `Task`) to launch the e2e-test-runner agent. E2E scenarios are sequential — each may depend on prior browser state — so `Agent` is used for synchronous execution with immediate result inspection.\n\n## Instructions\n\n### Step 0: Read Configuration\n\n1. Read `.claude\u002Ffrontend-react-plugin.json` → extract `mockFirst`, `baseDir`, `appDir`, `e2eTool`, `routerMode`, `devPort` (default `5173` when absent)\n2. If `baseDir` is missing, use default value `\"src\"`\n3. If `mockFirst` is missing, use default value `true`\n4. If `appDir` is missing, use default value `\".\"` (project root)\n5. If `e2eTool` is missing, use default value `\"agent-browser\"` (backward-compatible — existing configs behave exactly as before)\n6. If `routerMode` is missing, use default value `\"declarative\"`\n7. If the file does not exist:\n   > \"Frontend React Plugin has not been initialized. Please run `\u002Ffrontend-react-plugin:fe-init` first.\"\n   - Stop here.\n8. **Derive `srcPath`** — take the config `baseDir` **after its default is applied** and remove the leading `{appDir}\u002F` (`app\u002Fsrc` + `appDir=app` → `src`; `appDir=\".\"` → unchanged; `appDir == baseDir` → `.`). Every `npx …` path argument uses `srcPath`; the repo-relative source root stays available for file operations. See CLAUDE.md § Build Command Working Directory.\n\n**Tool branch (`e2eTool`).** The steps below are the **`agent-browser`** path (default). The only mode-aware element on that path is the dev-server launch (Step 3), which branches on `routerMode` per the **Router-mode command matrix** in the plugin CLAUDE.md. When **`e2eTool == playwright`**, `playwright.config.ts` `webServer` owns the dev server — follow the **Playwright mode** overrides marked inline in Steps 1, 2, 3, 3.5, 4, 5, 6, and 7; the lock, user confirmation, report save, and progress-update steps are shared and unchanged. Reference `templates\u002Fe2e-playwright.md` for the Playwright patterns.\n\n### Step 1: Validate Prerequisites\n\n1. Check if `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json` exists\n   - If not found:\n     > \"Implementation plan not found.\"\n     > \"Please run `\u002Ffrontend-react-plugin:fe-plan {feature}` first.\"\n     - Stop here.\n\n2. Read `plan.json` → extract `feature`, `e2eTests`, `routes`\n\n3. Read `docs\u002Fspecs\u002F{feature}\u002F.progress\u002F{feature}.json` → extract `workingLanguage` (default: `\"en\"`), `implementation.status`, and `standalone` (default `false`) — passed to the runner, which branches its spec reads on it\n4. Language name mapping: `en` = English, `ko` = Korean, `vi` = Vietnamese\n\n**Communication language**: All user-facing output in this skill must be in {workingLanguage_name}.\n\n1. **Status check** — verify `implementation.status` indicates code has been generated:\n   - Accepted statuses: `generated`, `verified`, `verify-failed`, `reviewed`, `review-failed`, `fixing`, `resolved`, `escalated`, `done`\n   - If status is `\"planned\"`, `\"gen-failed\"`, or absent:\n     > \"No generated code found (current status: '{status}').\"\n     > \"Please run `\u002Ffrontend-react-plugin:fe-gen {feature}` first.\"\n     - Stop here.\n\n2. **E2E scenarios check** — verify `e2eTests` exists and is non-empty in plan.json:\n   - If `e2eTests` is absent or empty — branch on the progress file's `standalone` flag:\n     - Non-standalone:\n       > \"No E2E scenarios defined in the implementation plan.\"\n       > \"Add multi-page test scenarios to `test-scenarios.md` and re-run `\u002Ffrontend-react-plugin:fe-plan {feature}`.\"\n     - Standalone (`standalone: true` — there is no `test-scenarios.md` and never will be):\n       > \"No E2E scenarios in the plan. Standalone plans derive generic flows per screen — re-run `\u002Ffrontend-react-plugin:fe-plan {feature} --standalone` (the planner now emits them), or add `e2eTests[]` entries to plan.json by hand.\"\n     - Stop here in both cases.\n     - Stop here.\n\n6b. **Route-to-scenario URL validation** — cross-check E2E URLs against route definitions:\n   - Extract all `startUrl` values from `e2eTests[]`\n   - Extract all route `path` values from `routes.entries` in plan.json\n   - For each `startUrl`:\n     - Strip dynamic segments for matching (e.g., `\u002Fentities\u002Fent-001` matches `\u002Fentities\u002F:id`)\n     - Check if a matching route pattern exists in `routes.entries`\n   - If any `startUrl` has no matching route:\n     > \"Warning: E2E scenario '{id}' uses URL '{startUrl}' but no matching route found in plan.json.\"\n     > \"Available routes: {list of route paths}\"\n     > \"Options: 1. Continue anyway  2. Update plan first (`\u002Ffrontend-react-plugin:fe-plan {feature}`)\"\n\n1. **Agent-browser CLI check**:\n   ```bash\n   agent-browser --version 2>&1\n   ```\n   - If command not found:\n     > \"agent-browser CLI is not installed. Install with one of:\"\n     > \"  npm i -g agent-browser\"\n     > \"  brew install agent-browser\"\n     > \"  cargo install agent-browser\"\n     - Stop here.\n\n2. **Agent-browser skill check** — verify `.claude\u002Fskills\u002Fagent-browser\u002FSKILL.md` exists:\n   - If not found:\n     > \"Agent-browser skill not installed. Run `\u002Ffrontend-react-plugin:fe-init` to install external skills.\"\n     - Stop here.\n\n> **Playwright mode:** skip the **Agent-browser CLI check** and **Agent-browser skill check** above (items 1–2 — agent-browser-only) and run these instead, from `{appDir}` (prefix `cd {appDir} &&` unless `appDir` is `\".\"`):\n> - **Playwright CLI check** — `npx playwright --version 2>&1`. If not found:\n>   > \"Playwright is not installed. Add it with: `pnpm add -D @playwright\u002Ftest` (then run `npx playwright install` once for the browser binaries).\"\n>   - Stop here.\n> - **Harness check** — glob `{appDir}\u002Fplaywright.config.ts` and `{appDir}\u002Fe2e\u002Ffixtures.ts`. If either is absent:\n>   > \"Playwright harness not found. It is scaffolded by foundation-generator on the first feature — run `\u002Ffrontend-react-plugin:fe-gen {feature}` first.\"\n>   - Stop here.\n> - **Browser-binaries note (R6)** — if the suite later reports missing browser binaries, do not fail opaquely: print `npx playwright install` and stop (per D7, the plugin never installs binaries itself).\n\n### Lock Acquire\n\nAcquire the feature lock `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002F.lock` with `holder: \"fe-e2e\"`, per CLAUDE.md § Lock file. **Check the holder's `pid` before treating any lock as stale** — the 30-minute rule sweeps ghost locks, it does not time out a live one. Held by a live holder → report `holder` and `acquiredAt`, then stop.\n\n**Release on every exit below.** Any \"stop here\" from this point on — a user declining a\nconfirmation, a validation refusal, an agent that fails — releases this lock first. The lock is\ntaken before the confirmation prompts, so a refusal that just stops leaves the feature locked and\nevery later command refusing it (CLAUDE.md § Lock file).\n\n### Step 2: Confirm with User\n\nDisplay the E2E test plan:\n\n```\nE2E Testing for '{feature}':\n\n  Plan: docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json\n  Dev server: http:\u002F\u002Flocalhost:5173 (VITE_ENABLE_MOCKS=true)\n\n  Scenarios ({scenarioCount}):\n    {id}: {name} ({stepCount} steps) — {source}\n    {id}: {name} ({stepCount} steps) — {source}\n    ...\n\n  Prerequisites:\n    agent-browser: {version}\n    MSW mocks: {enabled\u002Fdisabled}\n```\n\n> **Playwright mode:** in the summary, show `Playwright: {version}` (from `npx playwright --version`) instead of `agent-browser`, and replace the dev-server line with `Dev server: managed by playwright.config.ts webServer (VITE_ENABLE_MOCKS=true)`.\n\nAsk:\n> \"Proceed with E2E testing?\"\n\nIf the user declines, release the lock and stop here.\n\n### Step 3: Start Dev Server\n\n> **Playwright mode:** skip this entire step. `playwright.config.ts` `webServer` starts the dev server (with `VITE_ENABLE_MOCKS=true` and `reuseExistingServer`) when the suite runs — do not start, port-check, or track a dev server here (no `VITE_PID`).\n\n1. Check if port 5173 is already in use:\n   ```bash\n   lsof -i :5173 -t 2>\u002Fdev\u002Fnull\n   ```\n   - If a process is found:\n     > \"Port 5173 is already in use (PID: {pid}).\"\n     > \"Options: 1. Use a different port  2. Kill the existing process  3. Cancel\"\n     - Adjust port accordingly or stop.\n\n2. Start the dev server in background (from `{appDir}`). The dev command is **mode-aware** — read the **Router-mode command matrix** in the plugin CLAUDE.md and branch on `routerMode`: `declarative` \u002F `data` → `npx vite --port {port}`; `framework` → `npx react-router dev --port {port}`.\n   ```bash\n   # {devCommand} = mode-aware dev command from the command matrix, incl. --port {port}:\n   #   declarative \u002F data:  npx vite --port {port}\n   #   framework:           npx react-router dev --port {port}\n   cd {appDir} && VITE_ENABLE_MOCKS=true {devCommand} &\n   VITE_PID=$!\n   echo \"Dev server PID: $VITE_PID\"\n   ```\n   > If `appDir` is `\".\"`, omit the `cd` prefix.\n\n3. Wait for server readiness (max 30 seconds):\n   ```bash\n   for i in $(seq 1 30); do\n     curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:{port} 2>\u002Fdev\u002Fnull | grep -q \"200\" && break\n     sleep 1\n   done\n   ```\n\n4. Verify the server is running:\n   ```bash\n   curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:{port}\n   ```\n   - If not 200:\n     > \"Dev server failed to start within 30 seconds.\"\n     > \"Check Vite configuration and try again.\"\n     - Release lock and stop.\n\n### Step 3.5: Runtime Health Check\n\n> **Playwright mode:** skip this step. The `webServer` readiness gate plus each spec's own web-first assertions cover load\u002Fhealth; a fatal render error surfaces as a spec failure with a retained trace (fe-fix input).\n\nBefore launching the full E2E suite, verify the app loads without runtime errors:\n\n1. Open the app in agent-browser:\n   ```bash\n   agent-browser open http:\u002F\u002Flocalhost:{port} --session e2e-{feature}-healthcheck\n   agent-browser wait --network idle --session e2e-{feature}-healthcheck\n   agent-browser snapshot --session e2e-{feature}-healthcheck\n   ```\n\n2. Read the snapshot output and check for:\n   - **Blank page or \"Cannot GET \u002F\"** → Vite is serving but app has a fatal JS error\n   - **React error overlay** (red error box with stack trace) → runtime crash in React\n   - **\"Loading...\" stuck indefinitely** → MSW not intercepting, or app stuck in async init\n\n3. If any of the above are detected:\n   - Take a screenshot for evidence:\n     ```bash\n     agent-browser screenshot e2e-screenshots\u002F{feature}\u002Fhealthcheck-FAIL.png --session e2e-{feature}-healthcheck\n     ```\n   - Close the session:\n     ```bash\n     agent-browser close --session e2e-{feature}-healthcheck\n     ```\n   - Stop the dev server (Step 5), release lock, and report:\n     > \"App failed runtime health check. The page did not render correctly.\"\n     > \"{description of what was found: blank page \u002F error overlay \u002F stuck loading}\"\n     > \"Fix runtime issues first: `\u002Ffrontend-react-plugin:fe-debug {feature}` or `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n     - Stop here.\n\n4. If the app renders content successfully, close the healthcheck session:\n   ```bash\n   agent-browser close --session e2e-{feature}-healthcheck\n   ```\n\n### Step 4: Launch E2E Test Runner Agent\n\n```\nAgent(subagent_type: \"e2e-test-runner\", prompt: \"\n  Execute E2E test scenarios for '{feature}'.\n\n  Parameters:\n  - feature: {feature}\n  - planFile: docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json\n  - specDir: docs\u002Fspecs\u002F{feature}\u002F{workingLanguage}\u002F\n  - baseDir: {baseDir}\n  - appDir: {appDir}\n  - srcPath: {srcPath}\n  - standalone: {standalone}\n  - port: {port — agent-browser mode: the port Step 3 chose; Playwright mode: Step 3 is skipped, so pass `devPort` from config (default 5173), the same value foundation's Step 5c baked into playwright.config.ts webServer}\n  - e2eTool: {e2eTool}\n  - routerMode: {routerMode}\n  - e2eTests: {e2eTests from plan.json}\n  - workingLanguage: {workingLanguage}\n\n  Follow the process defined in agents\u002Fe2e-test-runner.md.\n  {If e2eTool == agent-browser:}\n  Read .claude\u002Fskills\u002Fagent-browser\u002FSKILL.md for agent-browser command reference.\n  Read templates\u002Fe2e-testing.md for plugin-specific E2E patterns.\n  {If e2eTool == playwright:}\n  Read templates\u002Fe2e-playwright.md for Playwright spec realization, SSR\u002Floader mocking, and trace-first reporting.\n  Realize e2eTests[] as Playwright specs under {appDir}\u002Fe2e\u002F{feature}\u002F and run `npx playwright test e2e\u002F{feature} 2>&1` from {appDir} (webServer-managed). On failure, record each failing scenario's trace path in the report evidence for fe-fix.\n\")\n```\n\n> **Playwright mode:** there is no manual dev server to depend on — the agent runs `npx playwright test e2e\u002F{feature} 2>&1` from `{appDir}` and Playwright's `webServer` provides the app. The returned report carries trace paths per failing scenario; Steps 3.5 and 5 are skipped.\n\n**On completion:**\n- Receive the e2e-report.json from the agent\n- Proceed to Step 5\n\n**On failure (agent error, not test failure):**\n- Record the error\n- Proceed to **Step 5 (stop dev server)**, then synthesize a failed report — `status: \"failed\"` with `failureKind: \"agent-error\"` (**not** `status: \"error\"`; the save and progress steps map only `completed`\u002F`partial`\u002F`failed`, so an `error` status has no mapping and leaves the progress file stale), the\n  agent's error text, zero scenarios executed — and run **Step 7 (save report)** and **Step 8\n  (update progress)** with it before releasing the lock. Step 7 is Save Report and Step 5 is the\n  server shutdown; skipping them leaves no record that the run happened and no status transition.\n\n### Step 5: Stop Dev Server\n\n> **Playwright mode:** skip this step — no dev server was started by this skill (`playwright.config.ts` `webServer` manages its own lifecycle).\n\nAlways stop the dev server, even if tests failed:\n\n```bash\nkill {VITE_PID} 2>\u002Fdev\u002Fnull\n# Verify the process is stopped\nkill -0 {VITE_PID} 2>\u002Fdev\u002Fnull && kill -9 {VITE_PID} 2>\u002Fdev\u002Fnull\n```\n\n### Step 6: Display E2E Report\n\nDisplay the results from the e2e-test-runner agent:\n\n```\nE2E Test Report for '{feature}':\n\n  Status: {PASS\u002FPARTIAL\u002FFAIL}\n\n  Scenarios:\n    {PASS\u002FFAIL} {id}: {name} — {source}\n      {step results if failed}\n    {PASS\u002FFAIL} {id}: {name} — {source}\n    ...\n\n  Summary:\n    Passed: {passed}\u002F{total} scenarios\n    Failed: {failed} scenarios\n    Screenshots: e2e-screenshots\u002F{feature}\u002F\n\n  {If PARTIAL or FAIL:}\n  Failed Scenarios:\n    {id}: {name}\n      Step {N}: {action} — FAIL\n        Expected: {expected}\n        Actual: {actual}\n        Evidence: {screenshot path}\n```\n\n> **Playwright mode:** the `Screenshots:` line becomes `Traces:` and each failed scenario's `Evidence:` cites the trace path (open with `npx playwright show-trace \u003Ctrace.zip>`). The report structure (overall status, per-scenario pass\u002Ffail) is otherwise identical.\n\n### Step 7: Save E2E Report\n\nSave the full report to `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fe2e-report.json`.\n\n> **Playwright mode:** the e2e-report.json schema is unchanged (per-scenario pass\u002Ffail + evidence). Each failing scenario's `evidence` cites its Playwright **trace path** — these are the trace paths `fe-fix` (e2e-fix) opens with `npx playwright show-trace`. The `completed`\u002F`partial`\u002F`failed` status mapping below applies unchanged.\n\n**Status mapping from agent output**: The e2e-test-runner agent uses different status values than the progress file. When saving e2e-report.json, keep the agent's original status values (`completed`\u002F`partial`\u002F`failed`). The progress file uses the normalized mapping below:\n\n| Agent output | Progress file | Display |\n|---|---|---|\n| `completed` | `pass` | `PASS` |\n| `partial` | `partial` | `PARTIAL` |\n| `failed` | `fail` | `FAIL` |\n\n### Step 8: Update Progress\n\nRead `docs\u002Fspecs\u002F{feature}\u002F.progress\u002F{feature}.json` and update:\n\n**1. E2E field** — add or update the `e2e` field under `implementation`:\n\n```json\n{\n  \"implementation\": {\n    \"e2e\": {\n      \"status\": \"pass | partial | fail\",\n      \"timestamp\": \"{ISO timestamp}\",\n      \"total\": 5,\n      \"passed\": 4,\n      \"failed\": 1,\n      \"scenarios\": [\n        { \"id\": \"E2E-001\", \"name\": \"Create entity flow\", \"status\": \"pass\", \"source\": \"TS-050, TS-051\" },\n        { \"id\": \"E2E-002\", \"name\": \"Edit entity flow\", \"status\": \"fail\", \"source\": \"TS-060\" }\n      ],\n      \"reportFile\": \"docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fe2e-report.json\"\n    }\n  }\n}\n```\n\n**2. Status update** — update `implementation.status` based on E2E result:\n- If all scenarios passed (`e2e.status` is `\"pass\"`) AND current `implementation.status` is\n  `\"fixing\"` AND `implementation.fix.mode` is `\"e2e\"`:\n  → Set `implementation.status = \"done\"` (E2E fix loop completed)\n- If all passed but `implementation.fix.mode` is `\"review\"` (or absent — a fix that predates the\n  field): do **not** promote. The review fix has not been re-reviewed; say so and name\n  `\u002Ffrontend-react-plugin:fe-review {feature}` as the next step. A green E2E run exercises flows,\n  not review findings — promoting here skips the re-review the fix flow requires.\n- Otherwise: do not change `implementation.status`\n\n**Merge rule**: Read the existing progress file, merge changes into the existing `implementation` object preserving all other fields (e.g., `planFile`, `tddPhases`, `verification`, `review`, `fix`, `debug`), then write back the complete file.\n\n### Step 9: Next Steps\n\n**If all scenarios pass:**\n> \"E2E testing complete. All {total} scenarios passed.\"\n> \"Feature is ready for deployment or further review.\"\n\n**If some scenarios fail:**\n> \"E2E testing found {failed} failing scenario(s).\"\n> \"You are now in the E2E testing loop (Loop 2). The fix → re-e2e cycle continues until all scenarios pass.\"\n> \"Fix E2E issues: `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n> \"Then re-run E2E: `\u002Ffrontend-react-plugin:fe-e2e {feature}`\"\n\n**If all scenarios fail:**\n> \"All E2E scenarios failed. This may indicate a fundamental issue.\"\n> \"Debug: `\u002Ffrontend-react-plugin:fe-debug {feature}`\"\n> \"Or fix: `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n\n**If E2E passes after previous E2E fix cycle and code changes were significant:**\n> \"E2E tests pass. If significant code changes were made during E2E fixes, consider re-running:\"\n> \"  `\u002Ffrontend-react-plugin:fe-review {feature}` (to verify code quality is maintained)\"\n\n### Lock Release\n\nDelete `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002F.lock`.\n","# E2E Testing Skill\n\nRun end-to-end tests on generated code. The runner is selected by `e2eTool` (default `agent-browser`): the **agent-browser** path starts a dev server with MSW mocks enabled and drives browser scenarios; the **playwright** path delegates the dev server to `playwright.config.ts` `webServer` and runs `npx playwright test`. Both realize the same tool-neutral `plan.json` `e2eTests[]` and write the same `e2e-report.json` schema.\n\n> **Tool choice**: This skill uses `Agent` (not `Task`) to launch the e2e-test-runner agent. E2E scenarios are sequential — each may depend on prior browser state — so `Agent` is used for synchronous execution with immediate result inspection.\n\n## Instructions\n\n### Step 0: Read Configuration\n\n1. Read `.claude\u002Ffrontend-react-plugin.json` → extract `mockFirst`, `baseDir`, `appDir`, `e2eTool`, `routerMode`, `devPort` (default `5173` when absent)\n2. If `baseDir` is missing, use default value `\"src\"`\n3. If `mockFirst` is missing, use default value `true`\n4. If `appDir` is missing, use default value `\".\"` (project root)\n5. If `e2eTool` is missing, use default value `\"agent-browser\"` (backward-compatible — existing configs behave exactly as before)\n6. If `routerMode` is missing, use default value `\"declarative\"`\n7. If the file does not exist:\n   > \"Frontend React Plugin has not been initialized. Please run `\u002Ffrontend-react-plugin:fe-init` first.\"\n   - Stop here.\n8. **Derive `srcPath`** — take the config `baseDir` **after its default is applied** and remove the leading `{appDir}\u002F` (`app\u002Fsrc` + `appDir=app` → `src`; `appDir=\".\"` → unchanged; `appDir == baseDir` → `.`). Every `npx …` path argument uses `srcPath`; the repo-relative source root stays available for file operations. See CLAUDE.md § Build Command Working Directory.\n\n**Tool branch (`e2eTool`).** The steps below are the **`agent-browser`** path (default). The only mode-aware element on that path is the dev-server launch (Step 3), which branches on `routerMode` per the **Router-mode command matrix** in the plugin CLAUDE.md. When **`e2eTool == playwright`**, `playwright.config.ts` `webServer` owns the dev server — follow the **Playwright mode** overrides marked inline in Steps 1, 2, 3, 3.5, 4, 5, 6, and 7; the lock, user confirmation, report save, and progress-update steps are shared and unchanged. Reference `templates\u002Fe2e-playwright.md` for the Playwright patterns.\n\n### Step 1: Validate Prerequisites\n\n1. Check if `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json` exists\n   - If not found:\n     > \"Implementation plan not found.\"\n     > \"Please run `\u002Ffrontend-react-plugin:fe-plan {feature}` first.\"\n     - Stop here.\n\n2. Read `plan.json` → extract `feature`, `e2eTests`, `routes`\n\n3. Read `docs\u002Fspecs\u002F{feature}\u002F.progress\u002F{feature}.json` → extract `workingLanguage` (default: `\"en\"`), `implementation.status`, and `standalone` (default `false`) — passed to the runner, which branches its spec reads on it\n4. Language name mapping: `en` = English, `ko` = Korean, `vi` = Vietnamese\n\n**Communication language**: All user-facing output in this skill must be in {workingLanguage_name}.\n\n1. **Status check** — verify `implementation.status` indicates code has been generated:\n   - Accepted statuses: `generated`, `verified`, `verify-failed`, `reviewed`, `review-failed`, `fixing`, `resolved`, `escalated`, `done`\n   - If status is `\"planned\"`, `\"gen-failed\"`, or absent:\n     > \"No generated code found (current status: '{status}').\"\n     > \"Please run `\u002Ffrontend-react-plugin:fe-gen {feature}` first.\"\n     - Stop here.\n\n2. **E2E scenarios check** — verify `e2eTests` exists and is non-empty in plan.json:\n   - If `e2eTests` is absent or empty — branch on the progress file's `standalone` flag:\n     - Non-standalone:\n       > \"No E2E scenarios defined in the implementation plan.\"\n       > \"Add multi-page test scenarios to `test-scenarios.md` and re-run `\u002Ffrontend-react-plugin:fe-plan {feature}`.\"\n     - Standalone (`standalone: true` — there is no `test-scenarios.md` and never will be):\n       > \"No E2E scenarios in the plan. Standalone plans derive generic flows per screen — re-run `\u002Ffrontend-react-plugin:fe-plan {feature} --standalone` (the planner now emits them), or add `e2eTests[]` entries to plan.json by hand.\"\n     - Stop here in both cases.\n     - Stop here.\n\n6b. **Route-to-scenario URL validation** — cross-check E2E URLs against route definitions:\n   - Extract all `startUrl` values from `e2eTests[]`\n   - Extract all route `path` values from `routes.entries` in plan.json\n   - For each `startUrl`:\n     - Strip dynamic segments for matching (e.g., `\u002Fentities\u002Fent-001` matches `\u002Fentities\u002F:id`)\n     - Check if a matching route pattern exists in `routes.entries`\n   - If any `startUrl` has no matching route:\n     > \"Warning: E2E scenario '{id}' uses URL '{startUrl}' but no matching route found in plan.json.\"\n     > \"Available routes: {list of route paths}\"\n     > \"Options: 1. Continue anyway  2. Update plan first (`\u002Ffrontend-react-plugin:fe-plan {feature}`)\"\n\n1. **Agent-browser CLI check**:\n   ```bash\n   agent-browser --version 2>&1\n   ```\n   - If command not found:\n     > \"agent-browser CLI is not installed. Install with one of:\"\n     > \"  npm i -g agent-browser\"\n     > \"  brew install agent-browser\"\n     > \"  cargo install agent-browser\"\n     - Stop here.\n\n2. **Agent-browser skill check** — verify `.claude\u002Fskills\u002Fagent-browser\u002FSKILL.md` exists:\n   - If not found:\n     > \"Agent-browser skill not installed. Run `\u002Ffrontend-react-plugin:fe-init` to install external skills.\"\n     - Stop here.\n\n> **Playwright mode:** skip the **Agent-browser CLI check** and **Agent-browser skill check** above (items 1–2 — agent-browser-only) and run these instead, from `{appDir}` (prefix `cd {appDir} &&` unless `appDir` is `\".\"`):\n> - **Playwright CLI check** — `npx playwright --version 2>&1`. If not found:\n>   > \"Playwright is not installed. Add it with: `pnpm add -D @playwright\u002Ftest` (then run `npx playwright install` once for the browser binaries).\"\n>   - Stop here.\n> - **Harness check** — glob `{appDir}\u002Fplaywright.config.ts` and `{appDir}\u002Fe2e\u002Ffixtures.ts`. If either is absent:\n>   > \"Playwright harness not found. It is scaffolded by foundation-generator on the first feature — run `\u002Ffrontend-react-plugin:fe-gen {feature}` first.\"\n>   - Stop here.\n> - **Browser-binaries note (R6)** — if the suite later reports missing browser binaries, do not fail opaquely: print `npx playwright install` and stop (per D7, the plugin never installs binaries itself).\n\n### Lock Acquire\n\nAcquire the feature lock `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002F.lock` with `holder: \"fe-e2e\"`, per CLAUDE.md § Lock file. **Check the holder's `pid` before treating any lock as stale** — the 30-minute rule sweeps ghost locks, it does not time out a live one. Held by a live holder → report `holder` and `acquiredAt`, then stop.\n\n**Release on every exit below.** Any \"stop here\" from this point on — a user declining a\nconfirmation, a validation refusal, an agent that fails — releases this lock first. The lock is\ntaken before the confirmation prompts, so a refusal that just stops leaves the feature locked and\nevery later command refusing it (CLAUDE.md § Lock file).\n\n### Step 2: Confirm with User\n\nDisplay the E2E test plan:\n\n```\nE2E Testing for '{feature}':\n\n  Plan: docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json\n  Dev server: http:\u002F\u002Flocalhost:5173 (VITE_ENABLE_MOCKS=true)\n\n  Scenarios ({scenarioCount}):\n    {id}: {name} ({stepCount} steps) — {source}\n    {id}: {name} ({stepCount} steps) — {source}\n    ...\n\n  Prerequisites:\n    agent-browser: {version}\n    MSW mocks: {enabled\u002Fdisabled}\n```\n\n> **Playwright mode:** in the summary, show `Playwright: {version}` (from `npx playwright --version`) instead of `agent-browser`, and replace the dev-server line with `Dev server: managed by playwright.config.ts webServer (VITE_ENABLE_MOCKS=true)`.\n\nAsk:\n> \"Proceed with E2E testing?\"\n\nIf the user declines, release the lock and stop here.\n\n### Step 3: Start Dev Server\n\n> **Playwright mode:** skip this entire step. `playwright.config.ts` `webServer` starts the dev server (with `VITE_ENABLE_MOCKS=true` and `reuseExistingServer`) when the suite runs — do not start, port-check, or track a dev server here (no `VITE_PID`).\n\n1. Check if port 5173 is already in use:\n   ```bash\n   lsof -i :5173 -t 2>\u002Fdev\u002Fnull\n   ```\n   - If a process is found:\n     > \"Port 5173 is already in use (PID: {pid}).\"\n     > \"Options: 1. Use a different port  2. Kill the existing process  3. Cancel\"\n     - Adjust port accordingly or stop.\n\n2. Start the dev server in background (from `{appDir}`). The dev command is **mode-aware** — read the **Router-mode command matrix** in the plugin CLAUDE.md and branch on `routerMode`: `declarative` \u002F `data` → `npx vite --port {port}`; `framework` → `npx react-router dev --port {port}`.\n   ```bash\n   # {devCommand} = mode-aware dev command from the command matrix, incl. --port {port}:\n   #   declarative \u002F data:  npx vite --port {port}\n   #   framework:           npx react-router dev --port {port}\n   cd {appDir} && VITE_ENABLE_MOCKS=true {devCommand} &\n   VITE_PID=$!\n   echo \"Dev server PID: $VITE_PID\"\n   ```\n   > If `appDir` is `\".\"`, omit the `cd` prefix.\n\n3. Wait for server readiness (max 30 seconds):\n   ```bash\n   for i in $(seq 1 30); do\n     curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:{port} 2>\u002Fdev\u002Fnull | grep -q \"200\" && break\n     sleep 1\n   done\n   ```\n\n4. Verify the server is running:\n   ```bash\n   curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" http:\u002F\u002Flocalhost:{port}\n   ```\n   - If not 200:\n     > \"Dev server failed to start within 30 seconds.\"\n     > \"Check Vite configuration and try again.\"\n     - Release lock and stop.\n\n### Step 3.5: Runtime Health Check\n\n> **Playwright mode:** skip this step. The `webServer` readiness gate plus each spec's own web-first assertions cover load\u002Fhealth; a fatal render error surfaces as a spec failure with a retained trace (fe-fix input).\n\nBefore launching the full E2E suite, verify the app loads without runtime errors:\n\n1. Open the app in agent-browser:\n   ```bash\n   agent-browser open http:\u002F\u002Flocalhost:{port} --session e2e-{feature}-healthcheck\n   agent-browser wait --network idle --session e2e-{feature}-healthcheck\n   agent-browser snapshot --session e2e-{feature}-healthcheck\n   ```\n\n2. Read the snapshot output and check for:\n   - **Blank page or \"Cannot GET \u002F\"** → Vite is serving but app has a fatal JS error\n   - **React error overlay** (red error box with stack trace) → runtime crash in React\n   - **\"Loading...\" stuck indefinitely** → MSW not intercepting, or app stuck in async init\n\n3. If any of the above are detected:\n   - Take a screenshot for evidence:\n     ```bash\n     agent-browser screenshot e2e-screenshots\u002F{feature}\u002Fhealthcheck-FAIL.png --session e2e-{feature}-healthcheck\n     ```\n   - Close the session:\n     ```bash\n     agent-browser close --session e2e-{feature}-healthcheck\n     ```\n   - Stop the dev server (Step 5), release lock, and report:\n     > \"App failed runtime health check. The page did not render correctly.\"\n     > \"{description of what was found: blank page \u002F error overlay \u002F stuck loading}\"\n     > \"Fix runtime issues first: `\u002Ffrontend-react-plugin:fe-debug {feature}` or `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n     - Stop here.\n\n4. If the app renders content successfully, close the healthcheck session:\n   ```bash\n   agent-browser close --session e2e-{feature}-healthcheck\n   ```\n\n### Step 4: Launch E2E Test Runner Agent\n\n```\nAgent(subagent_type: \"e2e-test-runner\", prompt: \"\n  Execute E2E test scenarios for '{feature}'.\n\n  Parameters:\n  - feature: {feature}\n  - planFile: docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fplan.json\n  - specDir: docs\u002Fspecs\u002F{feature}\u002F{workingLanguage}\u002F\n  - baseDir: {baseDir}\n  - appDir: {appDir}\n  - srcPath: {srcPath}\n  - standalone: {standalone}\n  - port: {port — agent-browser mode: the port Step 3 chose; Playwright mode: Step 3 is skipped, so pass `devPort` from config (default 5173), the same value foundation's Step 5c baked into playwright.config.ts webServer}\n  - e2eTool: {e2eTool}\n  - routerMode: {routerMode}\n  - e2eTests: {e2eTests from plan.json}\n  - workingLanguage: {workingLanguage}\n\n  Follow the process defined in agents\u002Fe2e-test-runner.md.\n  {If e2eTool == agent-browser:}\n  Read .claude\u002Fskills\u002Fagent-browser\u002FSKILL.md for agent-browser command reference.\n  Read templates\u002Fe2e-testing.md for plugin-specific E2E patterns.\n  {If e2eTool == playwright:}\n  Read templates\u002Fe2e-playwright.md for Playwright spec realization, SSR\u002Floader mocking, and trace-first reporting.\n  Realize e2eTests[] as Playwright specs under {appDir}\u002Fe2e\u002F{feature}\u002F and run `npx playwright test e2e\u002F{feature} 2>&1` from {appDir} (webServer-managed). On failure, record each failing scenario's trace path in the report evidence for fe-fix.\n\")\n```\n\n> **Playwright mode:** there is no manual dev server to depend on — the agent runs `npx playwright test e2e\u002F{feature} 2>&1` from `{appDir}` and Playwright's `webServer` provides the app. The returned report carries trace paths per failing scenario; Steps 3.5 and 5 are skipped.\n\n**On completion:**\n- Receive the e2e-report.json from the agent\n- Proceed to Step 5\n\n**On failure (agent error, not test failure):**\n- Record the error\n- Proceed to **Step 5 (stop dev server)**, then synthesize a failed report — `status: \"failed\"` with `failureKind: \"agent-error\"` (**not** `status: \"error\"`; the save and progress steps map only `completed`\u002F`partial`\u002F`failed`, so an `error` status has no mapping and leaves the progress file stale), the\n  agent's error text, zero scenarios executed — and run **Step 7 (save report)** and **Step 8\n  (update progress)** with it before releasing the lock. Step 7 is Save Report and Step 5 is the\n  server shutdown; skipping them leaves no record that the run happened and no status transition.\n\n### Step 5: Stop Dev Server\n\n> **Playwright mode:** skip this step — no dev server was started by this skill (`playwright.config.ts` `webServer` manages its own lifecycle).\n\nAlways stop the dev server, even if tests failed:\n\n```bash\nkill {VITE_PID} 2>\u002Fdev\u002Fnull\n# Verify the process is stopped\nkill -0 {VITE_PID} 2>\u002Fdev\u002Fnull && kill -9 {VITE_PID} 2>\u002Fdev\u002Fnull\n```\n\n### Step 6: Display E2E Report\n\nDisplay the results from the e2e-test-runner agent:\n\n```\nE2E Test Report for '{feature}':\n\n  Status: {PASS\u002FPARTIAL\u002FFAIL}\n\n  Scenarios:\n    {PASS\u002FFAIL} {id}: {name} — {source}\n      {step results if failed}\n    {PASS\u002FFAIL} {id}: {name} — {source}\n    ...\n\n  Summary:\n    Passed: {passed}\u002F{total} scenarios\n    Failed: {failed} scenarios\n    Screenshots: e2e-screenshots\u002F{feature}\u002F\n\n  {If PARTIAL or FAIL:}\n  Failed Scenarios:\n    {id}: {name}\n      Step {N}: {action} — FAIL\n        Expected: {expected}\n        Actual: {actual}\n        Evidence: {screenshot path}\n```\n\n> **Playwright mode:** the `Screenshots:` line becomes `Traces:` and each failed scenario's `Evidence:` cites the trace path (open with `npx playwright show-trace \u003Ctrace.zip>`). The report structure (overall status, per-scenario pass\u002Ffail) is otherwise identical.\n\n### Step 7: Save E2E Report\n\nSave the full report to `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fe2e-report.json`.\n\n> **Playwright mode:** the e2e-report.json schema is unchanged (per-scenario pass\u002Ffail + evidence). Each failing scenario's `evidence` cites its Playwright **trace path** — these are the trace paths `fe-fix` (e2e-fix) opens with `npx playwright show-trace`. The `completed`\u002F`partial`\u002F`failed` status mapping below applies unchanged.\n\n**Status mapping from agent output**: The e2e-test-runner agent uses different status values than the progress file. When saving e2e-report.json, keep the agent's original status values (`completed`\u002F`partial`\u002F`failed`). The progress file uses the normalized mapping below:\n\n| Agent output | Progress file | Display |\n|---|---|---|\n| `completed` | `pass` | `PASS` |\n| `partial` | `partial` | `PARTIAL` |\n| `failed` | `fail` | `FAIL` |\n\n### Step 8: Update Progress\n\nRead `docs\u002Fspecs\u002F{feature}\u002F.progress\u002F{feature}.json` and update:\n\n**1. E2E field** — add or update the `e2e` field under `implementation`:\n\n```json\n{\n  \"implementation\": {\n    \"e2e\": {\n      \"status\": \"pass | partial | fail\",\n      \"timestamp\": \"{ISO timestamp}\",\n      \"total\": 5,\n      \"passed\": 4,\n      \"failed\": 1,\n      \"scenarios\": [\n        { \"id\": \"E2E-001\", \"name\": \"Create entity flow\", \"status\": \"pass\", \"source\": \"TS-050, TS-051\" },\n        { \"id\": \"E2E-002\", \"name\": \"Edit entity flow\", \"status\": \"fail\", \"source\": \"TS-060\" }\n      ],\n      \"reportFile\": \"docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002Fe2e-report.json\"\n    }\n  }\n}\n```\n\n**2. Status update** — update `implementation.status` based on E2E result:\n- If all scenarios passed (`e2e.status` is `\"pass\"`) AND current `implementation.status` is\n  `\"fixing\"` AND `implementation.fix.mode` is `\"e2e\"`:\n  → Set `implementation.status = \"done\"` (E2E fix loop completed)\n- If all passed but `implementation.fix.mode` is `\"review\"` (or absent — a fix that predates the\n  field): do **not** promote. The review fix has not been re-reviewed; say so and name\n  `\u002Ffrontend-react-plugin:fe-review {feature}` as the next step. A green E2E run exercises flows,\n  not review findings — promoting here skips the re-review the fix flow requires.\n- Otherwise: do not change `implementation.status`\n\n**Merge rule**: Read the existing progress file, merge changes into the existing `implementation` object preserving all other fields (e.g., `planFile`, `tddPhases`, `verification`, `review`, `fix`, `debug`), then write back the complete file.\n\n### Step 9: Next Steps\n\n**If all scenarios pass:**\n> \"E2E testing complete. All {total} scenarios passed.\"\n> \"Feature is ready for deployment or further review.\"\n\n**If some scenarios fail:**\n> \"E2E testing found {failed} failing scenario(s).\"\n> \"You are now in the E2E testing loop (Loop 2). The fix → re-e2e cycle continues until all scenarios pass.\"\n> \"Fix E2E issues: `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n> \"Then re-run E2E: `\u002Ffrontend-react-plugin:fe-e2e {feature}`\"\n\n**If all scenarios fail:**\n> \"All E2E scenarios failed. This may indicate a fundamental issue.\"\n> \"Debug: `\u002Ffrontend-react-plugin:fe-debug {feature}`\"\n> \"Or fix: `\u002Ffrontend-react-plugin:fe-fix {feature}`\"\n\n**If E2E passes after previous E2E fix cycle and code changes were significant:**\n> \"E2E tests pass. If significant code changes were made during E2E fixes, consider re-running:\"\n> \"  `\u002Ffrontend-react-plugin:fe-review {feature}` (to verify code quality is maintained)\"\n\n### Lock Release\n\nDelete `docs\u002Fspecs\u002F{feature}\u002F.implementation\u002Ffrontend\u002F.lock`.\n",{"name":39,"description":40,"allowed-tools":41,"argument-hint":42,"user-invocable":43},"fe-e2e","Use after fe-review passes to validate user flows end-to-end in the browser.","Read, Write, Glob, Grep, Bash, Agent","\u003Cfeature-name>",true,"main","99f07e592261c66756a2927d0440fc5fef950507",".claude\u002Fskills\u002Fecc\u002Fsecurity-bounty-hunter","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile","2026-11-08 20:29:14",{"source":8,"skillName":39,"commands":51,"prompt":61,"zipAvailable":43},[52,55,58],{"tool":53,"command":54},"npx","npx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fe-e2e",{"tool":56,"command":57},"bunx","bunx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fe-e2e",{"tool":59,"command":60},"pnpm","pnpm dlx skills add sakamoto-family-smile\u002Fagent_monorepo --skill fe-e2e","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fsecurity-bounty-hunter\u002FSKILL.md",[],[64,98,106,126,149,178],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":78,"publishedAt":34},"01M6RW50THEFSKK42YNR8XFZA1","remotion-video-creation","Best practices for Remotion - Video creation in React. 29 domain-specific rules covering 3D, animations, audio, captions, charts, transitions, and more.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fremotion-video-creation\u002FSKILL.md",[70,75],{"categoryNo":71,"categoryName":72,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":76,"categoryName":77,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000016","图像与多媒体",[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,32],"Video","remotion video","remotion video creation","creation","Remotion","Charts","Captions","Audio","3D","Composition","Animation","best practices","more","animations","domain-specific","domain","three","Rules","Lottie",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":34},"01M6VCJ23NPECPSZJKGY691F75","hotcook-recipes","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fhotcook-agent\u002Fdata\u002Fskills\u002Fhotcook-recipes\u002FSKILL.md",[],[104,105],"hotcook recipes","recipes",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":120,"publishedAt":34},"01M6VCHHE00X5XHSDRD1KH1BW2","code-helper","Code review and assistance skill","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-2\u002Fskills\u002Fcode-helper\u002Fskill.md",[112,115],{"categoryNo":113,"categoryName":114,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[121,122,123,124,125],"code helper","helper","code","code review","review",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":138,"publishedAt":34},"01M6VCH3Q31A20H6SQ1H0J7JB2","research-assistant","Web research assistant skill using Brave Search MCP","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-1\u002Fskills\u002Fresearch-assistant\u002Fskill.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":136,"categoryName":137,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000023","Skill与智能体开发",[139,140,141,142,143,144,145,146,147,148],"research assistant","research","assistant","MCP","web","search","brave search","web research","brave","web research assistant",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":159,"publishedAt":34},"01M6VCGZZGPNVJSCZ1JTMNZAHY","x-api","X\u002FTwitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fx-api\u002FSKILL.md",[155,158],{"categoryNo":156,"categoryName":157,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},[160,161,162,163,164,165,32,166,167,168,169,170,171,172,173,174,175,176,144,177],"x api","api","with","when","limits","rate","threads","reading","native","posting","platform","patterns","api integration","twitter","use","auth","analytics","OAuth",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":185,"publishedAt":34},"01M6VCGVX6DGB1FKTA53QBBCQB","workspace-surface-audit","Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows. Use when the user wants help setting up Claude Code or understanding what capabilities are actually available in their environment.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fworkspace-surface-audit\u002FSKILL.md",[184],{"categoryNo":136,"categoryName":137,"taxonomyType":73,"taxonomyTypeDesc":74},[186,187,188,189,142,190,191,123,192,193,194,195,174,196,197,198,199,168,200,163],"workspace surface audit","workspace","audit","hooks","workflows","connectors","capabilities","harness","repo","environment","up","harness setup","active","env","value"]