关于 fix
fix 是一项需主动调用的 Claude Code 技能,根据已保存的审计报告规划和协调 SEO 修改。它会预览改动,只有明确确认后才由独立写入 Agent 执行,并提供回滚与验证流程。
主要功能
- 01按模块、维度、类别或范围筛选发现项
- 02基于已保存的审计报告规划修改
- 03预览差异和线上影响
- 04确认后签发一次性操作票据
- 05支持备份、回滚和验证
适用场景
- 01批准前审查 SEO 修复内容
- 02从审计结果中筛选安全的自动修复
- 03为支持的平台暂存修改
- 04验证已应用的修改或准备回滚
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill fix安装后在 Claude Code 中输入/fix确认已加载。
详细介绍
fix(选择性写入)
disable-model-invocation: true 表示模型绝不会自行触发此操作——只有用户运行 /claude-seo-ai:fix 才能触发。写入只能通过 seo-fixer-writer 子 Agent(唯一具有 Write/Edit 权限的 Agent)进行,并且只能在明确确认后进行。
--category 用于筛选报告中的发现项,匹配发现项的模块 ID(M5、M7、M17……)、轴(search、ai 或 both——both 会同时匹配前两者)、可修复类别(auto、proposed、advisory)或范围(page、site……),且不区分大小写。它不是主题词汇,也不会按逗号拆分:重复使用该标志以扩大筛选范围(--category M5 --category M17)。将用户的请求转换为这些词——“修复我的 schema”对应 --category M5,“只修复安全项”对应 --category auto——并说明你应用了哪个筛选条件。
--target 接受适配器 ID,以及别名 local、shopify、wordpress、manual 和提供商名称 webflow/wix/ghost/hubspot/bigcommerce(每个都会展开为 page-api)。
在进行任何操作之前,务必牢记两条绝对原则:
- 绝不能凭记忆修复。 每项变更都必须来自磁盘上持久保存的
report.json。如果此目标没有报告,先运行审计——不要根据对话记录重建发现项。 - 你绝不写入。 此线程只运行只读操作(
capabilities、plan、preview、verify)。apply、publish和rollback由写入子 Agent 执行,且每项都需要一个工单。
可修复类别(来自每个发现项的 fixable 字段——参见 schema/finding.schema.json)
- AUTO — 确定性、增量式、可机器验证且语义风险低。可写入(需提供差异并确认):meta
viewport/charset/<html lang>;Tier-1 JSON-LD 区块;sameAs/@id/dateModified(仅使用已确认的输入);robots.txt AI 爬虫预设 +Sitemap:行;自引用 canonical;hreflang 链接集;OG/Twitter 卡片;图像width/height;XML 站点地图条目;llms.txt(需披露,评分为 0)。 - PROPOSED — 会改变文本或含义;起草差异并要求逐项接受:生成的
<title>和 meta description、答案区块/TL;DR 改写、内部链接插入、标题结构调整、生成的图像替代文本。 - ADVISORY — 绝不写入:内容/E-E-A-T 改写、添加统计数据或引文、Core Web Vitals、渲染策略、重定向/状态码、链接建设、Merchant Center/GBP 后端数据。
每个步骤的设置
DATA="${CLAUDE_SEO_AI_HOME:-${CLAUDE_PLUGIN_DATA:-$HOME/.claude-seo-ai}}"
SCRIPTS="${CLAUDE_PLUGIN_ROOT}/scripts"
以下每条命令的格式均为 node "${CLAUDE_PLUGIN_ROOT}/scripts/<x>.mjs" …,并带有 --data "$DATA"。
凭据绝不通过标志传递:适配器会先读取环境变量 CLAUDE_PLUGIN_OPTION_<KEY>,再读取 <KEY>。如果缺少密钥,请指出密钥名称——绝不要要求用户在此处粘贴值。
流程
0. 解析并提前终止。 解析 DATA 和 SCRIPTS。如果提供了 --rollback <run_id>,则跳过其他所有操作:读取 <DATA>/fix/runs/<run_id>/manifest.json,展示将要恢复的内容(来自 <DATA>/backups/<run_id>/ 的文件、before/*.json 负载、已发布主题的 previous_live_id),请求确认,然后让写入子 Agent运行每个适配器的 rollback --all。报告结果并停止。
1. 加载报告——绝不凭记忆。 使用 --report <path>,否则使用 --run <id>,再否则使用此目标在 <DATA>/runs/<host>/latest 下的最新运行。读取 report.json(发现项、评分、目标)及其旁边的 profile.json。如果报告缺失,或 generated_at 已超过 24 h,请说明情况,并建议先重新运行 /claude-seo-ai:audit。未经用户明确同意,不要继续使用过期报告。
**2. 确认平台配置。**读取 profile.platform、profile.framework、
profile.capabilities、profile.write_targets。当平台置信度低于 high,或
--target auto 留下多个可能的写入路径时,展示检测结果(包括信号),
并请用户确认或通过 --target 覆盖。配置错误会导致写入错误的界面。
**3. 选择适配器并检查就绪状态。**按以下顺序选择:
- 本地路径目标(或
--project <dir>)⇒local-files,以及一个平台适配器,用于处理源代码树不负责的资源字段; - shopify ⇒
shopify-theme+shopify-admin; - wordpress ⇒ 凭据存在且 SEO 插件开放写入时使用
wordpress-rest,否则在设置了--ssh/WP_SSH时使用wordpress-wpcli,否则使用instructions; - webflow / wix / ghost / hubspot / bigcommerce ⇒ 存在密钥时使用
page-api,否则使用instructions; - squarespace / framer / unknown ⇒
instructions。
对每个适配器运行 node "${CLAUDE_PLUGIN_ROOT}/scripts/adapters/<adapter>.mjs" capabilities --data "$DATA"。
仅按名称列出缺失的密钥,并提示:运行 /plugin 为 claude-seo-ai 输入密钥,或在启动 Claude Code 的 shell 中导出这些密钥。缺少密钥会将该目标降级为 instructions;不会中止运行。
**4. 制定计划。**一次调用即可构建完整计划:
node "${CLAUDE_PLUGIN_ROOT}/scripts/fix-plan.mjs" --report <report.json> --profile <profile.json> \
--targets <a,b> --run <run_id> [--category …] [--include-proposed] [--answers <json>] \
[--project <dir>] [--dev-url <u>] [--lang en|es] --data "$DATA"
它会将 plan.json + manifest.json 写入 <DATA>/fix/runs/<run_id>/,并返回分组摘要。对于尚未确定的现实输入——语言区域映射、sameAs 个人资料 URL、robots 预设、重定向目标、发布日期——在聊天中询问,并通过 --answers 传回。
切勿编造这些信息,也绝不能让 TODO:<field> 占位符进入写入操作。
**5. 预览。**对每项更改运行 preview --run <dir> --change <id>。按目标分组输出,并为每项更改标注其 live_impact:[none](文件或已暂存的主题)、[staged](写入草稿/未发布的界面,访客不可见)、[LIVE](立即可见)。对文件显示统一差异;对 API 负载显示请求 + 变量 + before 值;对 CLI 操作显示确切命令。Shopify 主题更改还会附带其 theme check 结果——若有错误,则阻止应用。
**6. 遇到 --dry-run 时停止。**打印摘要,明确说明未写入任何内容,然后结束。
默认采用 Dry-run:如果用户没有明确要求应用更改,就按 Dry-run 处理。
**7. 确认后再签发工单。**可逐项询问确认,也可让用户一次性接受整批更改——由用户选择。确认时必须说明用户接受的更改的 live_impact。对于每项已确认的更改,在确认的同一轮中:
node "${CLAUDE_PLUGIN_ROOT}/scripts/fix-ticket.mjs" issue --command "<the exact apply command>" \
--run <run_id> --change <chg_id> --data "$DATA"
工单仅可使用一次,并在 15 分钟后过期。在 manifest.json.confirmed 中记录已确认的 ID。绝不能为用户刚刚未接受的更改签发工单,也绝不能为未向用户展示的命令签发工单。
8. 仅派发一次写入器。调用一次 Agent(seo-fixer-writer),并提供 JSON 信封,包含:
RUN_DIR、SCRIPTS_DIR(绝对路径 ${CLAUDE_PLUGIN_ROOT}/scripts)、DATA、PROJECT_ROOT(本地目标)、confirmed_change_ids[]、tickets(每项更改对应的 ID)、publish(默认 false)、force、lang,以及 return: "JSON array of findings only"。--publish 需要再次确认,并且发布命令需要单独的工单——发布会让已暂存的工作变为可见,因此绝不能与应用确认合并处理。
**9. 验证。**对每项已应用的更改运行:verify --run <dir> --change <id> [--dev-url <u>],并检查该条发现自身的 verification.reproduce。如实解读结果——CDN 或页面缓存未更新时,状态应为 pending_cache,绝不能算通过。没有开发服务器的本地框架目标只能在源代码层面验证:应说明“源代码已验证;部署后请重新审计”,而不能声称线上页面已修复。
10. 报告。 列出变更 · 目标 · live_impact · 状态 · 验证的表格,随后说明:已暂存但尚未公开的内容、缓存注意事项、回滚命令(/claude-seo-ai:fix --rollback <run_id>)以及后续步骤(发布、重新审核,以及用户需要点击完成的剩余 instructions 项)。
目标类型
- 仅 URL(不使用
--project):绝不选择local-files——没有可供编辑的源代码树。框架网站通过平台适配器对各资源进行修复,其他所有操作则通过instructions完成;此外,还会提供使用--project <dir>重新运行以编辑源代码的选项。 - 本地框架项目:审核可能针对
http://localhost:3000或构建输出运行,但修复会通过route-map(路由 → 文件映射)编辑源代码,并通过--dev-url重新抓取运行中的开发服务器以进行验证。说明你验证的是三者中的哪一个。 - 没有 API 密钥的托管式建站工具:
instructions会以--lang en|es呈现准确的点击路径,并预先填好各项值。这是有效结果,不是失败。
安全(硬性规则)
- 默认采用试运行。 只有用户提出请求并确认变更后,才能写入。
- 遵循 Git 状态:除非使用
--force,否则拒绝写入有未提交变更的工作树;使用git status --porcelain检查,并优先创建seo-fix/<date>分支。 - 先备份:本地文件备份至
<DATA>/backups/<run_id>/<relpath>,远程资源备份至<RUN_DIR>/before/<change_id>.json,Shopify 备份完整主题副本。--rollback <run_id>会从这些位置原样恢复。 - 幂等:每项变更都带有标记或存在性检查;重新运行会产生
skipped_idempotent,绝不会重复添加区块。 - 默认绝不发布到线上:Shopify 推送至未发布的主题,Webflow/HubSpot 保持暂存状态,WordPress 绝不修改
status或文章内容,Wix 将publish:false设为默认值,除非端点另有要求。任何[LIVE]操作都会在询问前明确说明。 - 绝不触碰
.git/、.env*、锁文件、密钥材料、wp-config.php或 Shopify 的config/settings_data.json。guard-write和guard-bash钩子会分别强制执行这些限制。 - 凭据:仅通过环境变量提供,绝不放入 argv、绝不回显、绝不写入仓库中的文件。日志中的命令会经过脱敏处理。
- 不捏造信息:不编造统计数据、引用、价格、评分或身份链接,也不回填过去的
dateModified。