AGENTS.md — literary-lab 工作契约
本文件对本仓库的一切 agent 与人类协作者生效,是唯一权威规范。
冲突时的优先级:AGENTS.md>docs/**> 单张任务卡 > 模型自身的写作习惯。
读完本文件再动手。任何一条铁律被违反,产出即视为未完成,不进入review。
0. 这个仓库在干什么
为每位入选作家建档案,为每部作品建研究目录,用可核验的文本证据解释它如何运作:结构如何发力、人物何时脱离作者、语言在哪里露馅、幽默的机制是什么、荒诞在哪一步开始自洽。
判断研究是否成立,只看两件事:引文能不能核,论断能不能被反例推翻。
1. 十条铁律
- 无出处不引文。 任何加引号(
“、「」、《》内直接引用原文)的句子,必须能在同一作品的05-excerpts.md找到带定位:的条目。找不到就把引号去掉,改成转述。 - 定位分三级,不许装。
L1 page:页码(首选)L2 section:章节 / 幕 / 场 / 段序(暂无可核页码时使用)L3 unverified:未核 —— 不得作为原文引用出现,只能转述,且必须在正文写明“转述,未核页码”- 不代作者说话。 作者 / 叙述者 / 人物 / 译者 / 评论者是五个不同位置。写“叙述者在这里撒谎”,不写“卡夫卡认为”。译者的措辞不等于作者的原意。
- 每节至少一处文本证据 + 一处自我怀疑。 没有反例、没有“我读不出来”的论断,等于没做研究。
- 复述不超过单文件 15%。 本仓库不生产内容简介。
01-what.md的情节骨架允许 30%,其余文件禁止大段复述。 - 禁用空词。 “深刻、震撼、细腻、淋漓尽致、引人深思、堪称、无不、令人叹为观止”——除非紧跟着指认到具体某句、某个词、某个标点。
make check会扫这些词并报警。 - 版本意识。 译本差异必须点名(“此处文泽尔译作 X,另一译本作 Y”);没有原文语言能力时,明说依据的是译本。
- 二手文献只用于定位争议。 评论家的结论不能替代你的阅读;引用时标
[二手]并写清它反对谁。 - 不做 AI 腔。 禁“首先/其次/最后”、禁总分总、禁金句收尾、禁“让我们一起”、禁把每个发现都写成三点。
- 状态机唯一。 作品
status只能按planned → drafting → verifying → review → done推进;done必须make check全绿且 rubric ≥ 12/14。
2. 目录契约
authors/<author-slug>/author.md
authors/<author-slug>/works/<work-slug>/
README.md 01-what.md 02-structure.md 03-characters.md
04-language.md 05-excerpts.md 06-context.md
<author-slug>、<work-slug>:小写英文连字符(wang-xiaobo、golden-age),与 front matter 的slug完全一致。- 一个作家至少一个作品目录。主推作品写在
author.md的「作品队列」表里,未建目录的作品标queued。 status: planned的作品目录只需README.md;drafting起六个文件齐全,且满足字数下限(docs/methodology/quality-rubric.md)。
3. 文件契约(YAML front matter)
每个 .md 研究文件以 --- 包裹的 front matter 开头,键值扁平,列表用 [a, b] 或 - 缩进块。
author.md 必备键:
slug: kafka
name: 弗兰茨·卡夫卡
name_en: Franz Kafka
born: 1883
died: 1924
lang: de
order: 2
traits: [absurd-narrative, narrator-self-doubt]
status: done
updated: 2026-11-01
works/<work>/README.md 必备键:
slug: the-trial
title: 审判
author: kafka
year: 1925
form: 长篇小说(未完成)
traits: [absurd-narrative, narrator-self-doubt]
status: drafting
edition: 待核(候选:文泽尔译)
updated: 2026-11-01
traits/<trait>.md 必备键:slug、name、order、definition。特质 slug 是全库唯一枚举,新增特质须先建文件、再改 traits/README.md。
状态取值的语义:
- 作品:
planned(只有 README)→drafting(六份文件齐)→verifying(核定位)→review(审校)→done(rubric 达标) - 作家:
planned(仅建档,无作品开工)→drafting(有作品在写)→done(至少一部作品done)
必备小节(make check 校验):
| 文件 | 必需标题 |
|---|---|
author.md | ## 选择理由 ## 叙事签名 ## 作品队列 ## 研究问题 ## 版本与译本 |
README.md | ## 论点 ## 文件地图 ## 研究问题 ## 状态 |
01-what.md | ## 论点 ## 情节骨架 ## 命题与反命题 |
02-structure.md | ## 时间与顺序 ## 视角装置 ## 结构指纹 |
03-characters.md | ## 人物表 ## 自主性 |
04-language.md | ## 声音 ## 句法与节奏 ## 译文问题 |
05-excerpts.md | 至少 3 个 ### Q-... 引文块 |
06-context.md | ## 版本 ## 位置 ## 影响与争议 ## 出处 |
4. 摘录的格式(05-excerpts.md 的唯一合法形状)
摘录是本仓库的主体,不是附属。每部作品默认 20 条(写在 README.md 的 excerpt_target),按章节配额可扩到 100+;excerpts_status 记阶段:seed → growing → full(full 时 CI 强制达到目标条数)。
两种条目,不许混用:
Q-逐字引文:真的逐字,措辞有把握。正文里加引号(“…”、「…」)的原文只能来自这里。R-待核摘录:定位清楚、机制清楚,但措辞没十足把握。用转述,不加引号,并写清缺什么。
### Q-KAFKA-TRIAL-002 把"法"定义成一扇门
> 法的门前站着一个守门人。
- 定位:《审判》,第九章「在大教堂里」(L2 section)
- 原文语言:de
- 特质:absurd-narrative
- 核:高
- 解析:主语是"法",谓语却是"门前站着"……(≥60 字)
### R-KAFKA-TRIAL-014 布洛克的卷宗
- 定位:《审判》,第八章「商人布洛克」(L2 section)
- 特质:narrator-self-doubt
- 内容:布洛克向 K 展示自己多年积下的案情文件,一叠一叠,越翻越多。(转述,不加引号)
- 机制:文件的增殖把"打官司"变成一种收藏行为……(≥40 字)
- 缺:原句措辞待核;页码待核。
规则:
- 编号全库唯一:
Q-<作者大写>-<作品大写>-<三位序号>,R-同构。 Q-:单条引文 ≤ 200 汉字;- 解析:≥ 60 字;定位只能是L1 page或L2 section,L3一律拒收。Q-必须写- 核:高或- 核:中:高= 措辞有把握,只差页码;中= 句子主体确定、个别字词待核。没有“低”这一档——连主体都拿不准的,就老实留在R-。R-:- 内容:≥ 40 字、- 机制:≥ 40 字、- 缺:必填;不得出现>引文(出现即为“近似引用”,make check会拒收)。- 每部作品
done之前至少 3 条Q-;excerpts_status: full时条数必须达到excerpt_target。 - 升级路径:拿到实体书 → 逐条核措辞 → 把
R-改写成Q-(自动分配新序号)+ 补页码(升级为 L1)→make index。改前缀后,正文里对旧编号的引用要一并改,make check会抓漏。
贴原文:把 R- 升级成 Q-(一条命令)
# 单条
make promote ARGS="R-WANGXIAOBO-GOLDENAGE-002 --text '原文逐字粘贴在这里' --page 42 --confidence 高"
# 批量:paste.md 里每条以 ### R-xxx 开头,> 后面是原文,可选 - 页:42 / - 核:高
make promote ARGS="--from-file paste.md"
先导出待贴清单,填完再批量升级:
python3 tools/ll.py pending --author wang-xiaobo > paste.md # 每条给出编号、定位、要核的机制
# 在 paste.md 里把 `> 原文` 填上,能核页码就填 `- 页:42`,措辞有把握就改 `- 核:高`
make promote ARGS="--from-file paste.md"
命令会自动:分配下一个 Q- 序号、拼好 解析(机制 + 语境)、刷新摘录目录与 INDEX.md。剩下的只需跑 make check。
占位符(“粘贴到这里”)会被拒收——防止把模板当成原文写进库。
这是本仓库唯一允许“贴原文”的入口——因为原文必须来自你,不能来自模型的记忆。
- 文件顶部必须有 `
/双标记,中间的目录表由make index` 生成,不许手改。
额度(版权约束,与质量约束分离):
| 约束 | 上限 |
|---|---|
单条 Q- 引文 | 200 汉字(超出则分段节引,标 (节引)) |
| 单个研究文件 | 引文合计不超过该文件正文的 25% |
| 单次提交新增引文 | 1500 汉字 |
| 整库 | 以 make stats 输出为准,超过 25% 必须削减 |
R- 不计入引文字数,也不构成版权问题(它是转述),但它同样需要机制分析——转述不是偷懒的出口。
5. 角色与交接
五个角色,各有卡片:agents/curator.md、agents/close-reader.md、agents/source-verifier.md、agents/style-editor.md、agents/reviewer.md。
| 角色 | 管什么 | 不管什么 |
|---|---|---|
| curator | 目录、front matter、队列、INDEX、bibliography | 不写解读 |
| close-reader | 01–05 六份解剖 | 不改书目、不核页码 |
| source-verifier | 版本、译本、页码、定位升级 L3→L1 | 不改解读结论 |
| style-editor | 去 AI 腔、去书评腔、节奏与长短句 | 不改事实与论点 |
| reviewer | 按 rubric 打分、列 P0/P1/P2 | 不直接改稿 |
交接一律用任务卡(templates/task-card.md,或 GitHub 的「研究任务卡」issue)。任务卡必须写清:目标路径、本轮 1–3 个问题、已知证据、完成判据。没有完成判据的任务不许开工。
角色之间不许互相代笔。close-reader 发现引文核不了,标 待核 交给 source-verifier,不自己编页码。
6. 文体
- 用“我发现 / 这里有一处 / 如果……那么 / 我不确定的是”推进,不用“首先其次最后”。
- 每段三块肌肉:证据(哪一句)→ 推理(因此什么)→ 保留(但哪里说不通)。
- 允许不确定,并且要把不确定写出来;本库的诚实度就是它的信用。
- 少用形容词,多用动词和名词;引文之后必须先解释句子怎么运作,再谈感受。
- 禁止用一句漂亮话结束整篇。结尾要么留下未解决的问题,要么指出下一个可查的证据。
7. 命令
make check # 结构 + front matter + 引文 + 死链 + INDEX 同步 + 禁用词
make index # 重新生成 INDEX.md 与 traits/MATRIX.md
make test # tools 单元测试
make stats # 字数与覆盖统计
make new-author ARGS="slug --name 中文名 --name-en 'Latin Name' --born 1900 --died 1970 --order 11"
make new-work ARGS="author-slug work-slug --title 作品名 --year 1900"
8. 提交与 PR
- 一次提交只做一件事:一个作品目录、或一个特质、或一次工具改动。
- 提交信息:
<scope>: <做了什么>,scope 用作者/作品 slug,例如kafka/the-trial: 补第九章引文定位。 - PR 必须过
.github/pull_request_template.md的清单;make check红了不许开 PR。 - 任何“我觉得”进入正文前,先问:这句话的证据在哪一句?
9. 已知边界(写在这里,防止后来者高估本库)
- 除中文原作外,本库多数判断依据中译本,原文层面的论断一律标注依据译本。
- 页码核校需要实体书或可信扫描件;在核校完成前,相关引文停在
L2 section,这是有意的,不是疏漏。 - 本库不收录全文,不能替代原书;也不做作家生平年表(需要时给链接,不给转述)。