AGENT SKILL

fo-seo

SEO gate for one generated screen — checks head meta against the meta template, canonical and hreflang, sitemap/robots host rules, structured data and slug lists against the SEO spec snapshot (config.seo.specRef), one agent per aspect in parallel, and writes docs/gates/<app>/<screen>/seo.json. Use after fo-contract on indexable screens.

适用职业市场营销
使用场景营销推广
License 许可
MIT
最近更新
2026-11-13
Stars
★ 2
Forks
0

01 前言 Front Matter

name
fo-seo
description
SEO gate for one generated screen — checks head meta against the meta template, canonical and hreflang, sitemap/robots host rules, structured data and slug lists against the SEO spec snapshot (config.seo.specRef), one agent per aspect in parallel, and writes docs/gates/<app>/<screen>/seo.json. Use after fo-contract on indexable screens.
allowed-tools
Read, Write, Edit, Glob, Grep, Bash, Workflow
argument-hint
--app <name> --screen <id> [--only head,links,sitemap,structuredData,slugs]
user-invocable
true

03 SKILL.md 正文

fo-seo — SEO gate

Policy source: the SEO reference under config.seo.specRef (integrated spec, meta template, slug lists) plus the screen's spec; hosts from config.seo. The plugin checks; the SEO owner decides conflicts between the two specs (they are recorded in the plan's scope.conflicts).

Conventions: ${CLAUDE_PLUGIN_ROOT}/skills/fo-shared/SKILL.md.

Step 0 — Preconditions

Config (seo block present; absent → fo-init again), --app/--screen, plan. A screen whose routes are all noindex/member-only → record skipped evidence with that reason and stop. gates.verify.result pass with a current tree hash. config.seo.specRef exists. Lock seo.lock.

Aspects: head, links, sitemap, structuredData, slugs — the last only for screens the slug list covers (city landing, search); --only narrows.

Step 1 — Dev server, run, wait

The probes need the app running with mocks. Start it in the background before the workflow and stop it after, with the log under the repo root (the command itself runs from <app.dir>): ROOT=$(git rev-parse --show-toplevel); mkdir -p "$ROOT/.claude/frontend-ohmyhotel/<app>"; (cd <app.dir> && npx react-router dev --port <devPort> > "$ROOT/.claude/frontend-ohmyhotel/<app>/dev.log" 2>&1 &); wait until curl -s -o /dev/null -w '%{http_code}' http://localhost:<devPort>/ returns 200 (up to 60 s; otherwise record the gate as not-run with that reason). Pass serverUrl: "http://localhost:<devPort>" in the workflow args; kill the server process in Step 2.

Workflow with name: "frontend-ohmyhotel-plugin:fo-seo-run" and args: { app, screen, config, planFile, specDir, serverUrl, outDir: "<evidenceDir>/<app>/<screen>/seo", aspects }. Wait for the task notification.

Step 2 — Evidence

fo-evidence --app <app> --screen <screen> --gate seo --result <pass|fail|skipped|not-run> --from <result json> $(for f in <app.dir>/e2e/seo/<screen>.*.spec.ts; do [ -e "$f" ] && printf -- '--spec-path %s ' "$f"; done)

Set the seo row in block 5 of <Screen>.spec.md. Release the lock.

Step 3 — Report and next

Per aspect: result, routes × languages checked, findings (critical first). Findings that trace to a conflict already recorded in the plan are shown under that conflict, not as new defects. Suggested commit gate(<screen>): seo <result>. Next:

  • pass or skipped → the two manual gates, recorded with the same tool so fo-progress and fo-cutover see them: echo '{"reviewer":"<name>","note":"<where>"}' | fo-evidence --app <app> --screen <screen> --gate designerReview --result pass and … --gate planningAcceptance --result pass (payload: {"ticket":"OMH-…","comment":"<id>"}); then fo-progress
  • findings → /frontend-ohmyhotel-plugin:fo-fix … --from seo, then fo-verify and fo-seo again
  • a conflict → the SEO owner's decision goes into docs/adr/; the plan's conflict entry is closed by fo-plan

Done when the evidence and tracker are written, the lock is released and the next command is named.

04 同仓库更多 Skills

ohmyhotelco
ohmyhotelco/hare-cc-plugins

hp-shared

Shared conventions for every homepage-plugin agent and skill — stack, code conventions, state-file writes, check commands and how to report them. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.

★ 2
ohmyhotelco
ohmyhotelco/hare-cc-plugins

fe-shared

Shared conventions for every frontend-react-plugin agent and skill — code conventions, state files and locks, accepted deviations, design principles, build working directory, router-mode command matrix, TypeScript check. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.

前端开发视觉设计
★ 2
ohmyhotelco
ohmyhotelco/hare-cc-plugins

be-spring-shared

Shared conventions for every backend-springboot-plugin agent and skill — tech stack, CQRS architecture, naming, coding standards, TDD, commit and build rules, state files. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.

后端与接口Skill与智能体开发
★ 2
ohmyhotelco
ohmyhotelco/hare-cc-plugins

pp-translate

Use after directly editing the working language spec to sync changes to other supported languages.

★ 2
ohmyhotelco
ohmyhotelco/hare-cc-plugins

pp-sync-stitch

Use when wireframes were manually edited on the Stitch website and need to be re-fetched to the local project.

Skill与智能体开发
★ 2
ohmyhotelco
ohmyhotelco/hare-cc-plugins

pp-sync-notion

Use when a specification needs to be published or re-synced to Notion after finalization or manual edits.

Skill与智能体开发
★ 2