---
name: aiwatch-site-ops
description: 完整接管「AI 观象台」（AIWATCH）导航站的运营。包含运营策略（资讯/产品/博客更新什么、按什么标准、什么频率）与全部操作规程（上新、数据维护、推荐位轮换、下架、发布上线）。当你需要接管、值守、代运营或批量更新本站时使用。适用于 Claude Code / Cursor / 任意能执行 shell 的 agent。
---

# AIWATCH 站点运营技能（策略 + 操作）

你正在运营一个**全静态、内容即代码、由 agent 运营**的 AI 导航站：所有内容 = git 仓库 `src/content/` 下的 markdown 文件，网站是这些文件的纯函数。你写文件 → 构建校验 → 推到测试环境 → Claude 审阅 → 老板确认 → 生产上线。目标：**做成内容最新鲜、质量最高、流量最大的 AI 资源导航站**。

## 0. 前置条件

```bash
git clone <本仓库>   # 有仓库写权限即可运营
cd site && npm install
```

运营动作走 `npm run ops -- <命令>`（内置校验与查重），或直接手写 markdown（模板见 §8）。人类运营者可用线上 `/admin` 控制台做同样的事——两条路写的是同一批文件。

## 1. 核心心智

- **一条内容 = 一个文件**：`src/content/{tools,assets,news,blog}/<slug>.md`
- **schema 即质检**：`npm run verify`（=构建）校验全部字段，报错指出哪个文件哪个字段
- **运营发布 = 推 staging**：CI 再次校验并部署测试站 `https://aiwatch-cqr.pages.dev`；这不等于生产上线
- **生产上线 = 老板确认**：Claude 审阅后，老板确认固定 commit SHA，只有 Claude Code 能发布到 `https://agentopia.cc`
- **角色分工**：产品/文章/资讯由 Kimi 编写、Claude 审阅；新功能由 Claude 开发、Kimi 测试；两类都必须老板确认后上线
- **人类确认明确版本**：班报和待确认消息必须带 commit SHA，不能用“最新版”代指
- **宁缺毋滥**：所有内容线都是质量优先，当天没有达标内容就不发

## 2. 运营节奏总表（策略核心）

| 频率 | 动作 | 详见 |
|---|---|---|
| 每日 ×2（09:00 / 21:00 北京时间） | 资讯值守：收录当日 AI 大事 | §3 |
| 每日 ×1（09:00 班内） | 产品上新 1-3 个 + 刷新热度 + 轮换今日推荐 | §4 |
| 每周 ×2（周二、周五） | 博客发文各 1 篇 | §5 |
| 每周 ×1（周日） | 数据大扫除：过气 hot 下位、坏链检查、分类结构复核 | §6 |
| 每月 ×1（月初） | 深度长文 1 篇 + 运营复盘 | §5/§6 |
| 大事件随时 | 突发大新闻即时收录（不等班次） | §3 |

> 自动采集流水线 `.github/workflows/collect.yml`（cron 北京 08:30/16:30）会自动跑四源采集→LLM 编辑→入库，是每日班次的原料来源；开启需仓库 secret `ANTHROPIC_API_KEY` 且 variable `COLLECT_ENABLED=true`。未开启时按 §3/§4 人工巡源，效果等同。

### 2.5 定时任务规范（运营 agent 上岗第一件事：照此建 cron）

运营 agent 必须用自己的定时任务机制把下表建齐（时间均为北京时间）。每个任务跑完都要在工作群发一条结果（哪怕是"本班无可收录"）。**例外：大事件哨兵静默运行**，只在真的收录了大事件时才发声——高频任务绝不能变成高频刷屏。

**班报幂等纪律**：班报格式固定以 commit 号收尾（无提交的班写"无 commit"）；发送前先查询群内最近消息，若已存在含同一 commit 号的班报则跳过不发——发送层的重试/会话冲突不允许造成重复刷屏。

**实时性分级承诺**：大事件（新旗舰模型/十亿级并购/重大监管）目标 1 小时内上站（哨兵负责）；常规资讯 12 小时内（班次负责）。导航站不是快讯站，常规资讯求精不求快，堆时效只会堆噪音。

**哨兵收录门槛 vs hot 徽章——两个独立维度，别混为一谈**：哨兵是否即时收录，看的是**时效紧迫性**（重大官宣、HN 榜一级全网热议——等到下一班热度就凉了）；条目标不标 hot，看的是 §3 的**内容判级**（可复现性、信源级别、影响面）。所以哨兵可以收录一条"高时效但 hot: false"的新闻（例：自报成果的预印本冲上 HN 榜一），但回报里必须说明两件事：为什么不能等班次 + 为什么不给 hot。反过来，不达高时效门槛的条目（哪怕质量很好）哨兵一律不收、留给班次——哨兵的产出应该稀少，一天超过 2 条说明门槛松了。

| cron | 任务 | 做什么 |
|---|---|---|
| 每 30 分钟 | 大事件哨兵（轻量） | 只跑一条命令：`curl -s "https://aihot.virxact.com/api/public/items?hours=1"`。无高分条目→静默结束（不发群、不写内容）；出现热度 ≥85 或独立信源 ≥5 的条目→核实 permalink，达"高时效"门槛就即时收录并在群里报一声"⚡大事件已收录"（附来源链接） |
| 每日 09:00 | 早班资讯 + 产品雷达 | 按 §3.5 巡 AI HOT + 各源 → 发 1-4 条 news；产品雷达必须独立给出 1-3 个新品，或列至少 5 个候选及逐条淘汰理由；再做 §4 热度/推荐维护 |
| 每日 21:00 | 晚班资讯 | 同上（只做资讯，不重复轮换 featured） |
| 每日 22:00 | 运营日报 | 按下方模板向工作群发当日报告 |
| 周二/周五 11:00 | 博客发文 | 按 §5 选题写作发布 |
| 周日 15:00 | 数据大扫除 | 按 §6 执行并把结果并入当晚日报 |

**运营日报模板**（22:00 发群，纯文本）：
```
[AI观象台·日报 YYYY-MM-DD]
资讯：+N 条（其中大事件 N）｜产品：+N 个（slug 列表）｜博客：+N 篇
产品候选：若产品 +0，列至少 5 个候选及各自淘汰理由
数据维护：热度刷新 N 个 / 今日推荐轮换为 xxx / hot 调整 N
测试环境：https://aiwatch-cqr.pages.dev ｜候选 commit：<SHA>｜状态：待 Claude 审阅 / 待老板确认
异常与阻塞：xxx（无则写"无"）
明日计划：xxx
统计口径：git log --since=当日00:00 --oneline 数一遍当日内容 commit
```

### 3.5 资讯第一信源：AI HOT（免 key 公开 API）

实时 AI 资讯聚合，滚动更新、覆盖最近 7 天，每班先查它再看其他源：

```bash
curl -s "https://aihot.virxact.com/api/public/hot-topics"          # 当前热点排行（带热度分 0-100、源数量）
curl -s "https://aihot.virxact.com/api/public/daily"               # 今日日报精选
curl -s "https://aihot.virxact.com/api/public/items?hours=12"      # 最近 12 小时滚动条目（班次间隔用）
```

用法纪律：AI HOT 给的是**线索**，收录前仍要打开 permalink 核实原始来源与日期，按 §3 收录标准过滤；热度分 ≥80 且多信源的条目重点看是否够 hot 标准。完整用法见 https://aihot.virxact.com/aihot-skill/ 。

## 3. 资讯策略（news）

**更新频率**：每日 2 班（09:00 / 21:00），每班 1-4 条，全天合计 3-8 条；重大事件不等班次即时发。

**收什么**（满足其一即候选）：
1. 模型发布 / 旗舰级重大版本（GPT/Claude/Gemini/开源旗舰等）
2. 融资并购：金额 ≥5000 万美元，或知名 AI 公司被收购
3. 标准与生态：MCP/协议类标准演进、重要平台政策变化
4. 监管与安全：AI 法规落地、重大 AI 安全事件
5. 里程碑数据：用户量/下载量/ARR 等行业级里程碑

**不收什么**：日常小版本更新、纯营销通稿、无实锤传闻、与 AI 无关的科技新闻。

### 3.1 新鲜度门禁（旧闻倒灌防线）

收录前必须打开**原始来源**核实三项时间，不得用 AI HOT/HN/搜索引擎的抓取或重推时间替代：
- `ingestedAt`：首次入库时间（系统自动写入，不能回填；早于门禁启用日 2026-07-21 会被拒绝）；
- `publishedAt`：本站对外展示时间（不得与 ingestedAt 相差超过 48 小时）；
- `sourcePublishedAt`：本次引用的原始来源实际发布时间（页面时间戳）；
- `eventAt`：事件发生或首次公开时间。

**默认窗口 = 48 小时**：`sourcePublishedAt` 必须在本站发稿前 48 小时内；`eventAt` 也在 48 小时内时标 `freshness: current`。原始日期无法核实就不发新闻。

事件已超过 48 小时，仅允许两种例外，且必须有最近 48 小时内的新原始来源，并写 `freshnessNote`：
1. `new-disclosure`：今天首次披露旧事件此前未知的重要事实（例：监管文件今天首次披露 3 月并购金额）；
2. `major-update`：旧事件今天出现可核实的重大后续（法院最终判决、产品正式开放、交易完成等）。

“聚合器今天又推了一次”“HN 今天重新热”“刚发现官网页面”“产品页已有这项功能”都不是例外。**产品旧功能只补产品页/写教程，不伪装成今日新闻。** 新资讯还必须填 `sourceUrl`（实际打开核实的原始来源）和 `dateEvidence`（一句话说明页面如何显示日期）；`npm run verify` 会对新增 news 文件做硬门禁。

**匿名信源红线**：单一媒体援引匿名消息人士、且无官方确认/监管文件/实物或可复现实测的爆料，哪怕媒体权威、数字惊人，也属于「无实锤传闻」——加一句“官方未确认”不等于可以收录。至少满足其一才可入站：①两家权威媒体各自独立核实（不是互相转述同一匿名源）②后续公司确认 ③监管/法院文件佐证 ④产品或代码已实际出现。

**Benchmark 数字纪律**：不能只抄百分比，必须写清指标分母和含义（如“80% sqllogictest 查询结果与标准答案一致”，不等于“实现 80% SQLite”）；厂商内部测试一律标自报，并交代是否单轮、有无第三方复现、对照是否完整、是否等于生产可用。

**hot（大事件）标准**：改变行业格局级别——新旗舰模型发布、10 亿美元级并购、重大监管落地。每日 hot ≤2，宁缺勿滥。

**巡源清单**（人工班次用；自动采集覆盖前两个）：**AI HOT API（首查，见 §3.5）**、HackerNews（AI 关键词 >120 分）、官方博客 RSS（OpenAI/Anthropic/Google）、TechCrunch AI、X 热议、机器之心/量子位（中文侧）。

**法律/刑事/具名指控类新闻（高危纪律）**：涉及诉讼、犯罪指控、具名个人的报道，①案件要素（法院、日期、当事人、罪名）必须逐项与两家以上权威来源核对，刑事案与民事案的地点/程序不得混写 ②一律用"指控/据起诉书/声称"框架，绝不把指控写成已定罪事实 ③标题与 summary 只陈述事实，不做立场推断（"等于承认""标志着转向"这类编辑评论不进标题）④尽量补充双方口径（如被告回应、公司自述数据）保持平衡 ⑤涉未成年人案件不写受害者可识别细节。

**写法**：标题陈述事实（≤30 字为佳）、summary ≤120 字讲清"发生了什么+为什么重要"、正文 1-3 段讲事实与影响；涉及站内产品**必填** `relatedTools`（详情页自动挂产品卡）。发布命令示例：
```bash
npm run ops -- add-news \
  --title "标题" --source "官方博客" --source-url "https://..." \
  --date-evidence "官网文章页显示 2026-07-21 08:00 UTC" \
  --source-at "2026-07-21T08:00:00Z" --event-at "2026-07-21T08:00:00Z" \
  --freshness current --summary "一句话" --related "kimi"  # ingestedAt/publishedAt 自动写；大事件另加 --hot
```
旧事件今天首次披露新事实时用 `--freshness new-disclosure --freshness-note "监管文件今天首次披露此前未公开金额"`。

## 4. 产品策略（tools）

**更新频率**：每日 1-3 个新产品（质量不够当天可为 0）；每日刷新 top 产品热度；每日轮换今日推荐。

**收录标准**（全部满足）：真实可用（官网能访问、能注册/下载）、面向 AI/Agent、非换皮套壳。**优先级**：①新发布或重大改版 ②热度快速上涨（榜单/star 增速）③填补站内分类空白。

**候选来源**：自动采集流水线产出、Product Hunt 日榜、GitHub Trending、HuggingFace Trending、X/Reddit 热议。收录前 `ops -- list tools` 查重（同名/同官网不重复）。产品雷达与资讯巡检是两个独立交付物，不能因为资讯较多而省略产品扫描；当天 0 新品时，班报必须列至少 5 个实际看过的候选及淘汰理由，证明“宁缺毋滥”而非漏跑。

**全字段规格（缺一不发）**：
- `icon`：真实 logo。三种写法：lobehub id（mono-only 名单别加 -color：cursor/midjourney/ollama/v0/windsurf/suno/runway/notebooklm/flux/kimi）/ GitHub 官方头像 URL（`https://github.com/<owner>.png`，开箱可用）/ 上传路径 `/uploads/..`（其它域名 URL 需先加 CSP img-src 白名单，慎用）
- `cover`：真实封面（**不许拿 logo 凑数**——无 cover 时卡片才回退到淡彩底+logo，那是兜底不是常态）。按优先级三选一：
  1. **官方 og:image**（首选）：`curl -sL <官网> | grep -o '<meta[^>]*og:image[^>]*>'` 取 URL，压缩流水线：
     ```bash
     curl -sL "<og:image URL>" -o /tmp/c && sips -Z 1200 -s format jpeg -s formatOptions 70 /tmp/c --out public/uploads/covers/<slug>.jpg
     # 目标 ≤200KB，超了降 formatOptions 到 55-60
     ```
  2. **官网首屏截图**（og 缺失/是纯 logo 时）：playwright 截图（脚本放**项目根目录**跑，/tmp 下解析不到依赖）：
     ```js
     // node .shot.mjs ；viewport 1200x630（= 全站统一封面比例 40:21，截出来直接零裁切）+ deviceScaleFactor 1.5，networkidle 后再等 2.5s
     const p = await b.newPage({ viewport: { width: 1200, height: 630 }, deviceScaleFactor: 1.5 });
     await p.goto(url, { waitUntil: 'networkidle' }); await p.waitForTimeout(2500);
     await p.screenshot({ path: '/tmp/covers/<slug>.png' });
     ```
     截完必须用 Read 工具目检（Cloudflare 盾/cookie 弹窗/空白页都不能用），再走 sips 压缩。
     **cookie 弹窗处理**：截图前先尝试点掉（`page.click('button:has-text("Accept")')` / "同意" / "Accept all"，catch 掉找不到的情况），再兜底删除常见容器：
     `await page.evaluate(() => document.querySelectorAll('[id*="cookie" i],[class*="cookie" i],[id*="consent" i],[class*="consent" i],[aria-label*="cookie" i]').forEach(e => e.remove()))`
     处理后等 500ms 再截
  3. **品牌字卡 SVG**（官网被盾挡死时兜底）：自绘 1200×630 SVG 存 `public/uploads/covers/<slug>.svg`，规范见 §5.5 封面设计规范
- **封面质检**：入库前 Read 目检一遍——不许出现被裁切的文字、真人无关照片、纯黑/纯白大空块
- **禁止纯 logo 封面（老板红线）**：封面必须有产品信息量。判定：如果整张图只有 logo/wordmark/一句 slogan 居中（哪怕是官方 og 图），就是不合格——og 图是 logo 卡时**降级用官网产品界面截图**（首屏之外可以截功能页/编辑器/工作台，选画面信息最丰富的一屏）；只有官网有防爬盾实在截不到时，才允许品牌字卡兜底。合格参照：Krea（作品墙）、Speechify（手机 UI）、可灵（产品界面）；不合格参照：纯色底+居中 wordmark
- `category`：优先用现有分类；**新分类必须同步 `src/lib/cats.ts` 的 CAT_SLUGS**（否则静态分类页 slug 回退难看）；同分类同 categoryColor
- `highlights` ×3、`changelog` 2-3 条近期**真实**更新（日期加引号）
- 正文 350-500 字、编辑部口吻四段式：是什么+当前能力 / 适合谁+典型用法 / 与竞品差异 / 注意事项。禁止营销黑话
- `trend7d` 用真实量级（对齐站内：旗舰 1 万+，主流 3k-9k，新品 几百）

**每日数据维护**：
- 刷热度：对 top10 产品按真实榜单/star 增速更新 `ops -- trend <slug> <值>`（量级一致即可）
- 轮换今日推荐：`featured` 字段即配置——标几个进几个轮播（产品按热度、博客按发布时间排序，全站上限 8 个）。建议保持 3-6 个：2-4 个产品 + 1-2 篇博客。每日轮换：给最旧的 `feature --off`，换当天最亮眼的新品/大更新上位
- 热门区：`hot` 标记按周复核（见 §6），热度跌出前 10 的 `hot --off`

## 5. 博客策略（blog）

**更新频率**：每周 2 篇，**周二、周五**发布（publishedAt 写当天 10:00 +08:00）。

**内容配比**（kind 四选一）：
| 类型 | 频率 | 写什么 | SEO 目标 |
|---|---|---|---|
| 实操教程 | 每周 ≥1（主力） | 给 agent 装 MCP/skill、用某产品完成具体任务、workflow 搭建 | 吃「怎么用 X 做 Y」长尾词 |
| 横向评测 | 双周 1 | 同分类 3-5 个产品对比选型（必须内链站内产品页） | 吃「X 和 Y 哪个好」「X 替代品」 |
| 深度长文 | 每月 1（月初） | 生态盘点、趋势分析、半年/年度复盘 | 品牌与外链 |
| 复盘 | 不定期 | 本站运营实践、agent 工程经验 | 差异化内容 |

**选题来源**（按序）：①本周大资讯的延展解读 ②新收录产品的使用教程 ③站内分类覆盖空白 ④搜索长尾词灵感（「AI 工具怎么选」类问题）。

**写作规格**：
- 标题含目标搜索词（如「给你的 Claude Code 装上这 5 个 MCP」）；summary ≤120 字
- 800-1500 字，h2/h3 分节（自动生成侧栏目录）
- **≥2 张简洁风自绘 SVG 示意图**，存 `public/img/blog/`，风格：白底/灰线 #E6E6E6/淡彩块（#F4F1FF 等 cv 色）/系统字体，参考已有 mcp-arch.svg
- 命令/代码用代码块（页面可复制）；提站内产品直接写产品名（侧栏自动挂「提到的产品」卡）
- 本周最佳一篇设 `featured: true` 进今日推荐轮播（同时最多 1 篇，换新时把旧的关掉）

### 5.5 封面设计规范（产品字卡 + 博客封面，交给生图/自绘都按这个来）

**全站统一比例（铁律）**：所有封面素材 = **1200×630（40:21，og 标准比例）**，全站四个展示槽位（产品卡片、产品详情页头图、今日推荐 banner、博客卡片）已全部锁死同一比例——素材做对比例就**零裁切**，做错比例必然截断。校验：`sips -g pixelWidth -g pixelHeight <文件>`，宽高比必须 ≈1.905。异形素材（16:9、2:1 等）先居中裁：`sips -c <h> <w>` 裁到 40:21 再入库。

**通用**：1200×630、最终 ≤200KB；风格必须贴站内设计系统——纯白或低饱和淡彩底、无渐变堆叠、无阴影光晕；强调色只用 --brand #3D7BFA（蓝）与 --acc-red #EE6B4D（红）两支；中文用系统 sans（PingFang），代码/日期用等宽。

**产品品牌字卡**（官网截不到图时的兜底，SVG 手绘）：
- 底色取该产品分类的淡彩（cv-purple/blue/pink/cyan/orange 对应色），可加 1-2 层同色系低透明度装饰形状（波浪/几何线），不超过 2 层
- 中央大号产品 wordmark（深色，72-104px），下方一行小字 tagline（≤20 字，中文+英文皆可）
- 禁止：假 UI 截图、乱造 logo 图形（logo 已在卡片名字旁单独渲染，字卡不必重复画标）

**博客封面**（每篇必配，自绘 SVG 存 `public/img/blog/covers/<slug>.svg`，frontmatter `cover` 指向它）：
- 白底 + 8px 内缩圆角细边框（#ECEEF3, 2px）
- 左上：kicker 一行（40px，#8A8F9E，letter-spacing 6，内容=「体裁 · 副题」）
- 左中：标题大字 1-2 行（88-96px，#1A1D26，可将关键词着 --brand 蓝或 --acc-red 红，全图最多一处彩色字）——字号别做小，这张图会缩到 ~360px 宽的推荐位卡片里，小字会糊成灰块
- 左下：mono 小字落款（30px，#B9BDC9，`AIWATCH · <日期或栏目>`）
- 右侧：一个主题相关的简笔示意元素（折线/几何卡片/连线图，≤3 个图形，用 #D7DBE4 线 + 淡彩填充 + 一点蓝红点缀）
- 生图工具产出的位图也按同样版式与配色，导出后压到 ≤200KB 存 `public/img/blog/covers/<slug>.jpg`

## 6. 周任务与月任务

**每周日（数据大扫除）**：
1. `hot` 复核：按 trend7d 排序，跌出前 10 的 `ops -- hot <slug> --off`
2. 坏链抽查：curl 抽查 5 个产品官网是否仍 200，挂了的产品视情况下架或换链接
3. 分类结构：单分类 >12 个产品考虑拆分（新分类记得同步 CAT_SLUGS）
4. 检查仓库体积：`du -sh .git public/uploads`，public/uploads 逼近 800MB 要报告（迁 R2 预案）

**每月初**：深度长文 1 篇 + 简短运营复盘（收录数/发文数/构建健康度，可发 blog 复盘或仅记录）。

## 7. 操作命令速查

```bash
# —— 上新 ——
npm run ops -- add-tool  --name "产品名" --category "AI 编程" --color purple \
  --summary "一句话卖点(≤80字)" --icon claude-color --site https://官网 \
  --pricing 免费增值 --platforms "Web,CLI" --tags "标签1,标签2" --trend 5000
npm run ops -- add-asset --name n8n-mcp --type mcp --category "开发与代码" \
  --summary "一句话" --install "claude mcp add n8n -- npx -y n8n-mcp" --official
npm run ops -- add-news --title "标题" --source "官方博客" --source-url "https://..." \
  --date-evidence "页面显示2026-07-21" --source-at "2026-07-21T08:00:00Z" \
  --event-at "2026-07-21T08:00:00Z" --freshness current --summary "一句话" --hot
npm run ops -- add-blog  --title "标题" --kind 实操教程 --minutes 8 --summary "一句话"

# —— 数据维护 ——
npm run ops -- trend <slug> <数值>        # 刷新 7 日热度
npm run ops -- feature <slug> [--off]     # 今日推荐（产品位；博客 featured 手改 frontmatter 或用 /admin）
npm run ops -- hot <slug> [--off]         # 首页热门区

# —— 下架 / 查看 ——
npm run ops -- retire <collection> <slug>
npm run ops -- list [collection]

# —— 自动采集 ——
npm run collect -- --dry                  # 只看采集+查重（不调 LLM 不写文件）
npm run collect                           # 完整一轮（需 ANTHROPIC_API_KEY）

# —— 验证与发布 ——
npm run verify                            # 构建+schema 校验（任何改动后必跑）
# 仅允许在 staging 分支执行；构建并发布到测试环境，不会上生产
npm run ops -- publish "运营: 收录 XX 等 3 个产品"
```

`add-*` 产出的文件正文留 TODO——必须按 §4/§5 规格补全后再发布。

### 7.5 测试 → 审阅 → 确认 → 生产

完整命令与回滚见仓库根 `RELEASE_PROCESS.md`。硬规则：

1. Kimi 只在 `staging` 或工作分支写产品、资讯、文章、资产；`ops publish` 只推 `staging`。
2. 测试地址固定为 `https://aiwatch-cqr.pages.dev`，有橙色测试标识且禁止搜索引擎索引。
3. 内容由 Claude 审阅；新功能由 Claude 开发、Kimi 在测试站测试。测试回报必须写范围、结果、问题和 commit SHA。
4. Claude 审阅/测试通过后向老板提交测试地址、变更清单和固定 SHA；老板明确确认后，Claude 才能发布生产 `https://agentopia.cc`。
5. `staging` 同时只承载一个待确认版本。等待确认期间的新工作留在 `work/*` 分支；老板确认不自动覆盖后续 SHA。
6. 任何人不得把“push 成功”“测试站可访问”表述为“生产已上线”。

## 8. 质量红线（违反=返工）

- summary ≤80 字（news/blog ≤120）、无营销黑话；正文按规格写满
- 图片规矩：logo/封面按 §4 三种来源与压缩流水线；单图 ≤200KB；绝不热链未加 CSP 白名单的域名
- 分类颜色全站一致；新分类同步 `src/lib/cats.ts`
- 不碰 `src/pages`、`src/layouts`、`public/_headers`——那是站点代码；要改代码先读仓库根 CLAUDE.md
- **Agent 友好承诺不可退化**：llms.txt 覆盖全部收录、.md 镜像、tools.json 字段只增不删、robots 对 AI 爬虫全开、/skills/* 三个对外技能可用
- 绝不在内容文件里写入任何密钥/token

## 9. 出错与回滚

- `verify` 红了：按报错改字段（高频坑：YAML 日期要引号、enum 拼错、summary 超长）
- 测试站发现问题：Kimi/Claude 在原候选上修复并重新推 staging；生成新 SHA 后旧确认失效
- 生产发现问题：由 Claude Code 重发上一个已验证 SHA；不要 force push，Kimi 不操作生产
- 构建/部署状态看 GitHub Actions；线上生效以内容标记为准（未知路径已返回真 404）

## 10. 手写内容模板（不用 ops 脚本时）

<details><summary>tools frontmatter</summary>

```yaml
---
name: 产品名
category: AI 编程
categoryColor: purple      # purple/blue/pink/cyan/orange
summary: 一句话卖点（≤80字）
icon: claude-color
site: https://官网
cover: /uploads/covers/xx.jpg  # 官方封面（≤200KB）
pricing: 免费增值           # 免费/免费增值/付费/开源
platforms: [Web, CLI]
tags: [标签1, 标签2]
trend7d: 5000
hot: false
featured: false
addedAt: 2026-07-07
highlights:
  - { title: 亮点1, desc: 一句描述 }
  - { title: 亮点2, desc: 一句描述 }
  - { title: 亮点3, desc: 一句描述 }
changelog:
  - { v: "2.0", date: "2026-07-07", note: 更新说明 }   # 日期必须引号
---
正文 350-500 字（是什么/适合谁/差异化/注意点）。
```
</details>

<details><summary>assets frontmatter（按 type 选填差异字段）</summary>

```yaml
---
name: xxx
type: mcp                  # github/mcp/skill/icon
category: 开发与代码
summary: 一句话（≤80字）
icon: n8n-color            # 可选
install: claude mcp add …  # 强烈建议：一键安装命令
repo: https://github.com/…
official: false
stars: 18.7k
trend7d: 1000
addedAt: 2026-07-07
# github 专属: owner / language / topics / forks / license
# mcp 专属:    toolsCount / transport(stdio|http|sse)
# skill 专属:  version / fits(适配agent的icon id数组)
# icon 专属:   formats / license / single(单个图标true)
---
正文 1-2 段。
```
</details>

<details><summary>news / blog frontmatter</summary>

```yaml
# news
---
title: 标题
source: 来源名称
sourceUrl: https://原始来源
# 页面上实际看到的日期证据，不写聚合器抓取时间
dateEvidence: 官网文章页显示 2026-07-21 08:00 UTC
hot: false
ingestedAt: 2026-07-21T17:00:00+08:00        # 首次入库（ops/admin 自动写）
publishedAt: 2026-07-21T17:00:00+08:00       # 本站展示
sourcePublishedAt: 2026-07-21T08:00:00Z    # 原始信源发布时间
eventAt: 2026-07-21T08:00:00Z              # 事件发生/首次公开
freshness: current                          # current/new-disclosure/major-update
# freshnessNote: 旧事件例外时必填，说明今天新增了什么事实
summary: 一句话（≤120字）
relatedTools: []           # 站内 tools 的 slug，能对上必填
---
正文 1-3 段（事实与影响）。

# blog
---
title: 标题（含目标搜索词）
kind: 实操教程              # 深度长文/实操教程/复盘/横向评测
minutes: 8
publishedAt: 2026-07-07T10:00:00+08:00
featured: false            # 设 true 进首页今日推荐轮播（数量不限，全站合计上限 8）
summary: 一句话（≤120字）
cover: /img/blog/covers/<slug>.svg   # 必填，按 §5.5 封面设计规范自绘
---
正文 800-1500 字，≥2 张自绘 SVG 示意图。
```
</details>
