From composir
Run fact-checker independently on a single article — verifies factual claims (dates, names, versions, API signatures, quotes) against authoritative sources. Auto-bootstraps .composir/<slug>-plan.md if missing by reading the article and proposing an authoritative-source whitelist for user confirmation. Use when you want to verify facts without running the full review-cycle (no academic-reviewer in the loop). Iterates up to 5 rounds fixing Critical issues.
How this skill is triggered — by the user, by Claude, or both
Slash command
/composir:fact-checkThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
对指定文章单独跑事实核查,不触发 academic-reviewer。适合:只想验事实不要学术审、快速核一下刚改过的段落、或在还没完整 brainstorm/plan 的文章上做一次事实体检。
对指定文章单独跑事实核查,不触发 academic-reviewer。适合:只想验事实不要学术审、快速核一下刚改过的段落、或在还没完整 brainstorm/plan 的文章上做一次事实体检。
参数 $ARGUMENTS:文章文件路径(绝对或相对)。必须传——单 agent 模式不像 review-cycle 会从 plan.md 推断目标文章。
ARTICLE_PATH=$(realpath "$ARGUMENTS")
SERIES_DIR=$(dirname "$ARTICLE_PATH")
SLUG=$(basename "$ARTICLE_PATH" .md)
COMPOSIR_DIR="$SERIES_DIR/.composir"
PLAN_PATH="$COMPOSIR_DIR/${SLUG}-plan.md"
如果 $ARGUMENTS 为空或文件不存在,停下来问用户给路径,别瞎猜。
分支 A — $PLAN_PATH 存在:
读 plan.md,跳到第 3 步。
如果 plan.md 是 review-cycle/plan skill 生成的、没有 ## 单 agent 核查历史 section,在 plan.md 末尾静默追加一个空的(用 Edit 追加,不打扰用户):
## 单 agent 核查历史
| 轮次 | 类型 | 日期 | Critical 数 | 状态 |
|------|------|------|-------------|------|
然后跳到第 3 步。
分支 B — $PLAN_PATH 不存在(bootstrap):
Read 整篇文章,识别主题
扫文章里的外部引用(产品名、项目名、论文、API、网址),列成候选
基于主题推断建议的权威源白名单:
检测是否涉及代码分析:扫文章里的 github.com URL / "这个项目" / "源码" 等信号。若有,用 AskUserQuestion 问:"文章涉及 <项目名> 源码分析,要给本地 clone 路径吗?(用于更精确的核查)"
生成 plan.md 初稿(模板见下),用 Write 写入 $PLAN_PATH(先 mkdir -p "$COMPOSIR_DIR")
告诉用户:
已在
<PLAN_PATH>生成 plan 初稿。请审阅"权威源"那一节——fact-checker 只认白名单里的 URL / 域名作为 Critical 级别的证据。 你可以增删域名、或跳过(空白名单时 agent 按通用黑名单兜底,但 Critical 判定会更保守)。
调整完告诉我"继续"。
停下等用户说继续(不要自动往下走)
plan.md 初稿模板:
# <SLUG> plan
(本 plan.md 由 `/composir:fact-check` 自动生成。主要用途:让 fact-checker / academic-reviewer 拿到核查必需的"权威源"白名单。可随时手工编辑。)
## 权威源
(fact-checker / academic-reviewer 用这份白名单判 Critical——只有这些域名 / URL 出的信息能独立支撑 Critical 级别的判定。bootstrap 按主题推断了下列候选,请增删调整。)
- <推断域名 1>
- <推断域名 2>
- ...
## 核查要点
(可选,你想特别关注的断言或节。留空也 OK。)
## 代码库位置
(**仅当文章分析某开源项目代码时需要**。bootstrap 检测到下列 GitHub 引用:
- <检测到的 URL>
请补本地 clone 路径 + 基于的 commit/tag 用于版本锚定。如不涉及代码分析,删掉本节。)
- GitHub URL:<URL>
- 本地路径:<path>
- 基于 commit/tag:<tag 或 hash>
## 单 agent 核查历史
| 轮次 | 类型 | 日期 | Critical 数 | 状态 |
|------|------|------|-------------|------|
读 ## 单 agent 核查历史 表里 type == fact 的行:
MN = M + 1如果 M >= 1 且最后一条 fact 行状态是 "pass":用 AskUserQuestion 问 "上次已 pass,要强制再跑吗?"——否则退出。
如果 N > 5:用 AskUserQuestion 问 "本文已经跑了 5 轮 fact-check 还没收敛,要继续再跑 5 轮吗?"——选否则停,让用户手动处理。
复用 review-cycle 第 9 步的异常处理:
Snapshot:用 Read 读 $ARTICLE_PATH 当前内容,用 Write 写到 $COMPOSIR_DIR/${SLUG}-snapshot-fact-solo-iter${N}.md
-fact-solo- 区分 review-cycle 的 -snapshot-iter${N}.md,互不覆盖Diff(仅 N >= 2):
$COMPOSIR_DIR/${SLUG}-snapshot-fact-solo-iter$((N-1)).md$COMPOSIR_DIR/${SLUG}-review-fact-solo-iter$((N-1)).mddiff -u <上轮 snapshot> <当前文章>,拿 unified diff 文本生成 prompt 前:读 plan.md 的"代码库位置"节。若有本地路径,准备代码库片段追加到 prompt 末尾(同 review-cycle 第 4 步格式):
本文涉及的代码库本地路径:<绝对路径>
(plan.md 记录的基于版本:<tag 或 commit hash>,如适用)
涉及该代码库的断言必须从这里读,不要用 WebFetch 抓 GitHub 或 WebSearch 找二手博客。
无本地路径则跳过这段。
iter1 prompt(N == 1):
**CWD 必做**:先执行 `cd "<SERIES_DIR 绝对路径>"`,再跑任何 Bash(含 composir-fetch)。否则 `.composir/.cache/` 会写到错误目录,缓存永远命不中。
审查这篇文章:<ARTICLE_PATH 绝对路径>
参考 <PLAN_PATH 绝对路径> 里的"权威源"和"核查要点"节,特别关注那些点。
[如 plan.md 有代码库位置,追加代码库片段]
这是 fact-check **单 agent 模式**——只跑你一个,没有 academic-reviewer 并行;输出格式和规则同常规。
请按你的职责产出结构化事实核查报告。
iter2+ prompt(N >= 2):
**CWD 必做**:先执行 `cd "<SERIES_DIR 绝对路径>"`,再跑任何 Bash(含 composir-fetch)。否则 `.composir/.cache/` 会写到错误目录,缓存永远命不中。
审查这篇文章:<ARTICLE_PATH 绝对路径>
参考 <PLAN_PATH 绝对路径> 里的"权威源"和"核查要点"节。
**本轮是第 <N> 轮 fact-check**(单 agent 模式——没有 academic-reviewer 的上轮报告)。
上一轮 fact-check 报告:<$COMPOSIR_DIR/${SLUG}-review-fact-solo-iter$((N-1)).md 绝对路径>
上一轮 fact-check snapshot:<$COMPOSIR_DIR/${SLUG}-snapshot-fact-solo-iter$((N-1)).md 绝对路径>
本轮文章与上轮 snapshot 的 diff(unified):
<把第 4 步拿到的 diff 文本直接贴进来>
**核查指引**(iter2+):
1. 重点审查本轮 diff 涉及的段落是否引入新事实问题
2. 对上一轮报告里标出的 Critical,确认是否已修复(修复了就不用重报;没修或改错了才重报)
3. 未动过的段落默认延续上轮判定——除非本轮改动让其他段落的既有断言失真(跨引用才看),否则不要主动重新扫
4. 不要推翻上一轮的判断——若认为上轮某条 Critical 判错了,在报告里单独加一节 "## 对上轮判定的异议"
5. 同样遵守硬规则:Critical 必须附一手源 URL
[如 plan.md 有代码库位置,追加代码库片段]
请按你的职责产出结构化事实核查报告。
用 Task tool 的 fact-checker subagent 类型 dispatch。
Agent 返回 Markdown 报告。用 Write 存到 $COMPOSIR_DIR/${SLUG}-review-fact-solo-iter${N}.md。
扫报告的"总结"节:
追加 ## 单 agent 核查历史 表一行(用 Edit):
| N | fact | YYYY-MM-DD | 0 | pass |
把报告里的 Warning + Minor 合成一段 advisory summary 发给用户,明说:"这些是 advisory,不触发自动修订——你决定要不要处理。"
告诉用户:"Fact-check 通过,共 N 轮。报告路径列表:…"
读报告所有 Critical 条目
逐条处理:
SKIPPED 列表,在最终总结里汇报给用户("agent 没遵守硬规则")数:Critical 总数 K、修了 FIXED = K - |SKIPPED|、跳过 |SKIPPED| 条
追加 ## 单 agent 核查历史 表一行:
| N | fact | YYYY-MM-DD | K | 修 FIXED,跳 |SKIPPED| |
简短报告:"第 N 轮 fact-check:K 条 Critical,修了 FIXED,跳过 |SKIPPED|(缺一手源)。进入第 N+1 轮……"
N++,回到第 3 步
/composir:review-cycle —— fact + academic 并行,full flow;写 plan.md 的"进度追踪表"(列 中文核查迭代)/composir:fact-check —— 只 fact 单边;写 plan.md 的 ## 单 agent 核查历史 表 type=fact 行/composir:academic-check —— 只 academic 单边;写同一张表 type=academic 行${SLUG}-snapshot-iter${N}.md / ${SLUG}-review-fact-iter${N}.md / ${SLUG}-review-academic-iter${N}.md${SLUG}-snapshot-fact-solo-iter${N}.md / ${SLUG}-review-fact-solo-iter${N}.md${SLUG}-snapshot-academic-solo-iter${N}.md / ${SLUG}-review-academic-solo-iter${N}.mdnpx claudepluginhub agenticfish/marketplace --plugin composirProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.