MindCite

Zotero + Obsidian + Codex research workflow template for literature reading, notes QA, and classification governance

中文 · English

MindCite

把 Zotero 论文库变成一个可追溯、可复用、可扩展的本地研究工作台。

Release v0.3.0 Local First Zotero Obsidian Codex

推荐方式:优先使用 Codex 智能部署;熟悉命令行的用户再看 快速开始。

MindCite 是一个面向研究者的本地文献工作流模板,用来把 Zotero、Obsidian 和 Codex 串成一条可复用的研究管线:先从 Zotero 建立本地索引,再把论文原文或全文缓存整理为结构化精读笔记,最后基于已生成的 notes 做问答、分类治理和理论/方法综述。

这个公开版是安全模板,不包含任何真实论文、真实索引、真实 Zotero 数据库、API key 或个人研究材料。仓库里的 examples/demo-vault 是完全虚构的演示数据,只用于试跑功能。

选择你的启动方式

如果你是推荐入口适合场景
Codex 用户Codex 智能部署指令让 Codex 自动拉库、配置、检查并只读连接 Zotero。
0 代码用户Codex 指令手册直接复制自然语言指令,让 Codex 代替你操作。
命令行用户快速开始自己复制命令并手动配置 .env。
先看效果5 分钟体验路径不配置真实 Zotero 和 API key,只跑合成 demo。
想做分类分类指南理解 theory/method/topic、审核队列和 Zotero dry-run。

工作流一览

flowchart LR
  Zotero["Zotero 本地库"] --> Index["本地索引"]
  Index --> Reading["精读 notes"]
  Reading --> QA["基于 notes 问答"]
  Reading --> Classify["分类审核队列"]
  Reading --> Tags["v0.3 标签体系审计"]
  Tags --> Taxonomy["正式 taxonomy"]
  Classify --> Synthesis["理论/方法/主题综述"]
  Classify --> DryRun["Zotero 写回 dry-run"]

项目主题

把 Zotero 论文库变成一个可追溯、可复用、可扩展的本地研究工作台。

MindCite 的核心不是“让 AI 替你读完所有论文”,而是帮你建立一条更稳的研究管线:Zotero 负责资料管理,Obsidian 负责长期沉淀,Codex 负责把重复的索引、精读、分类、检查和综述草稿自动化。

核心亮点

  • 本地优先:真实 PDF、Zotero 数据库、API key、日志和个人研究笔记默认不进仓库。
  • 可追溯:从 Zotero 索引到精读 notes,再到分类审核和综述草稿,每一步都有文件输出。
  • 可试跑:内置 examples/demo-vault 合成演示数据,刚下载就能验证主流程。
  • 可扩展:模型厂商、embedding、模板、分类维度和外部数据库都通过配置层扩展。
  • 可守底线:v0.2 起加入 schema 校验、原子写入、迁移 dry-run、quarantine 和 smoke test。
  • 分类更稳:v0.3 起支持“审标签体系”而不是逐篇审论文,用 a/p/m/r 管理新增、暂存、合并和丢弃。
  • 面向研究者:重点服务“持续阅读、分类治理、理论/方法积累、后续论文写作”,不是一次性的聊天问答。

适合谁

  • 你用 Zotero 管理论文,并希望把阅读结果沉淀到 Obsidian。
  • 你想用 Codex 或其他 AI coding agent 帮你自动跑索引、精读、分类和综述。
  • 你希望保留本地知识库能力,但不想把 Zotero 数据库、PDF、未发表论文和 API key 上传到云端。

不适合谁

  • 你只想要一个无需配置、打开网页就能用的在线工具。
  • 你还没有 Zotero 或 Obsidian 的基本使用习惯。
  • 你希望把整库论文和私人研究资料直接上传到 GitHub 或云端。
  • 你期待 AI 自动替代研究判断,而不是辅助整理、检索和生成草稿。

5 分钟体验路径

如果你只是先体验,不需要配置真实 Zotero 路径和 API key,直接跑合成演示数据:

git clone https://github.com/YYCCCHAOOO/MindCite.git MindCite
cd MindCite
python -m pip install -r requirements.txt
python tools/structure_check.py
python tools/validate_data_contracts.py --demo-only
$env:MINDCITE_ROOT=(Resolve-Path .\examples\demo-vault)
python _skills/Zotero-Library-Sync/scripts/vault_health_check.py
python _skills/Classification-Governance-System/scripts/build_classification_review_queue.py --all
python _skills/Classification-Governance-System/scripts/discover_open_tag_candidates.py --min-notes 1
python _skills/Classification-Governance-System/scripts/prioritize_open_tag_candidates.py
python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations
Remove-Item Env:\MINDCITE_ROOT

看到 ok: true 就说明本地结构、演示索引和分类审核队列都能正常跑通。之后再复制 .env.example,填自己的 Zotero 路径和模型 key。

目录结构

MindCite/
  _skills/                         # Codex 可读取的工作流技能与脚本
  config/                          # 通用配置模板
  docs/                            # 架构、Codex 配置、排障文档
  examples/demo-vault/             # 合成演示 Vault,不含真实研究信息
  indexes/                         # 运行时索引输出,默认不提交
  logs/                            # 运行日志,默认不提交
  migrations/                      # 数据结构迁移脚本
  notes/zotero_reading/_papers/    # 新版精读笔记输出,默认不提交
  schemas/                         # 核心数据契约
  templates/                       # 可放你的公开模板
  tools/                           # 发布安全检查工具

Codex 智能部署指令

如果你使用 Codex,推荐先不要手动配置。新建一个本地工作区后,直接复制下面这段话给 Codex:

请从 https://github.com/YYCCCHAOOO/MindCite 拉取仓库,帮我创建一个私有 MindCite Vault。请自动完成依赖安装、配置文件复制、结构检查和 demo smoke test。然后只读探测我的本机 Zotero 数据库和 storage 路径,写入本地 .env,并运行 update_zotero_index.py 生成本地索引。不要提交 .env、indexes、logs、notes、PDF、Zotero 数据库或任何 API key;不要执行任何 --apply;如果只是测试精读通路,请设置 MINDCITE_OFFLINE=1,避免调用远程模型。

Codex 应该完成:

  • 克隆仓库并进入项目目录。
  • 复制 .env.example 和 config/mindcite.example.json。
  • 安装 requirements.txt。
  • 运行 python tools/structure_check.py 和 python tools/smoke_test.py。
  • 只读探测 ZOTERO_DB_PATH 与 ZOTERO_STORAGE_PATH。
  • 生成本地 Zotero 索引,但不写回 Zotero。

更多 Codex 配置细节见 Codex Setup。

如果你没有代码基础,建议直接看 Codex 指令手册,里面按“部署、更新索引、精读、问答、分类、综述、安全检查”整理了可复制的自然语言指令。

快速开始

  1. 克隆仓库并进入目录。
git clone https://github.com/YYCCCHAOOO/MindCite.git MindCite
cd MindCite
  1. 创建本地配置文件。
Copy-Item .env.example .env
Copy-Item config/mindcite.example.json config/mindcite.json
  1. 编辑 .env。至少建议填写:
ZOTERO_DB_PATH=<你的 Zotero 本地数据库文件路径>
ZOTERO_STORAGE_PATH=<你的 Zotero storage 文件夹路径>
MINDCITE_LLM_PROVIDER=deepseek
MINDCITE_EMBEDDING_PROVIDER=siliconflow
DEEPSEEK_API_KEY=<你的 DeepSeek API key>
SILICONFLOW_API_KEY=<你的 SiliconFlow API key>

如果你只是先看演示,不需要填写真实 Zotero 路径和 API key。

  1. 安装 Python 依赖。
python -m pip install -r requirements.txt
  1. 做一次结构和安全检查。
python tools/structure_check.py
python tools/validate_data_contracts.py --demo-only
  1. 运行空 Vault 健康检查。
python _skills/Zotero-Library-Sync/scripts/vault_health_check.py
  1. 用合成演示数据试跑。
$env:MINDCITE_ROOT=(Resolve-Path .\examples\demo-vault)
python _skills/Zotero-Library-Sync/scripts/vault_health_check.py
python _skills/Classification-Governance-System/scripts/build_classification_review_queue.py --all
Remove-Item Env:\MINDCITE_ROOT

三条主流程

1. 更新 Zotero 索引

索引脚本会只读连接 Zotero 本地数据库,生成 indexes/zotero_library_index.jsonl,并尝试记录 PDF、全文缓存、Zotero 分类和已有阅读状态。

python _skills/Zotero-Reading-System/scripts/update_zotero_index.py

如果报错 No readable Zotero database found,说明 .env 里的 ZOTERO_DB_PATH 还没有配置,或路径不可读。

2. 精读文献生成 notes

精读主流程默认优先使用 Zotero 全文缓存;没有缓存时再回退 PDF。生成的新版笔记进入 notes/zotero_reading/_papers,阅读状态进入 logs/reading_status.jsonl。

python _skills/Zotero-Reading-System/scripts/zotero_ai_reading_pipeline.py --next-count 2

也可以指定 Zotero item key:

python _skills/Zotero-Reading-System/scripts/zotero_ai_reading_pipeline.py --item-keys ABC12345,XYZ67890

3. 基于 notes 回答问题

Notes-QA-System 的原则是只使用已经生成的新版本 notes,不回头扫描 Zotero note、批注或旧版笔记。这样可以保证回答来源稳定、可追溯。

在 Codex 中可以直接说:

根据已精读笔记,总结金融传染理论下的核心机制。

如果当前 notes 证据不足,agent 应明确说明“当前新版 notes 中证据不足”。

分类治理与综述流程

分类是 MindCite 中最复杂、也最值得谨慎使用的模块。详细说明见 分类指南。建议先按指南生成审核队列和 dry-run,不要一开始就写回 Zotero。

健康检查

python _skills/Zotero-Library-Sync/scripts/vault_health_check.py

输出:

  • indexes/vault_health_report.md
  • indexes/orphan_notes.jsonl

分类审核队列

python _skills/Classification-Governance-System/scripts/build_classification_review_queue.py --all

输出:

  • indexes/classification_review_queue.jsonl

标签体系审计

v0.3 推荐把分类治理拆成两层:旧流程继续生成“论文级审核队列”,新流程负责发现新标签、判断标签是否应该进入正式 taxonomy。你主要审标签是否值得存在,不需要逐篇确认每篇论文属于哪个标签。

宝宝级教程:v0.3 新功能怎么用

这个功能解决的是一个很具体的问题:你的 notes 越来越多以后,里面会出现很多新标签、缩写、英文别名、重复标签和导入噪声。v0.3 不要求你一篇篇论文去审,而是把这些“可能要进入长期分类体系的标签”集中成一张表,让你只判断标签本身要不要保留。

如果你没有代码基础,直接把这段话复制给 Codex:

请帮我运行 MindCite v0.3 标签体系审计。只做三步:发现开放标签候选、生成优先级审计表、生成决策预览。不要执行 --apply,不要写回 Zotero,不要批量修改 notes。完成后请告诉我 tag_taxonomy_open_candidate_priority.md 的路径,并用通俗语言解释哪些标签建议接受、哪些建议合并、哪些先暂存。

Codex 应该替你运行:

python _skills/Classification-Governance-System/scripts/discover_open_tag_candidates.py --min-notes 1
python _skills/Classification-Governance-System/scripts/prioritize_open_tag_candidates.py
python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations

运行完你只需要看一个文件:

indexes/tag_taxonomy_open_candidate_priority.md

把它理解成一张“标签体检表”:

你看到的列宝宝级理解你要不要改
label系统发现的候选标签名一般不改
source_dimension它原来像 theory、method 还是 topic一般不改
suggested_operation系统给你的建议只参考,不自动生效
operation你的最终决定重点只改这一列
merge_target如果要合并,合并到哪个旧标签只有 operation=m 时才需要看
parent_choice如果这是子标签,挂到哪个父标签下面不确定就先空着

operation 只填四种字母:

填什么意思例子
a接受,加入正式标签体系你确认“因果识别”以后会长期用
p暂存,先观察你觉得可能有用,但现在还不确定
m合并到已有标签DCC 合并到 method:DCC-GARCH
r丢弃,加入黑名单metadata import 这种导入噪声

推荐第一次这样做:

  1. 先不要追求一次整理完,只看前 20 个高优先级标签。
  2. 明显重复的填 m,并确认 merge_target 对不对。
  3. 明显有长期价值的填 a。
  4. 看不懂的全部保持 p。
  5. 明显不是研究标签的填 r。

改完表以后,再让 Codex 只做预览:

我已经修改了 tag_taxonomy_open_candidate_priority.md。请只运行 v0.3 标签决策预览,不要 --apply。请告诉我 accepted、merged、rejected、pending 各有多少个,并说明会不会修改 taxonomy。

对应命令是:

python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations

只有当你确认预览没问题,才可以让 Codex 应用:

我确认 preview 没问题。请执行 v0.3 标签决策 --apply。只允许修改 classification_taxonomy.json 和 tag_taxonomy_discard_blacklist.json,不要写回 Zotero,不要批量修改 notes。完成后运行 safety_scan 和 validate_data_contracts。

对应命令是:

python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations --apply

安全提醒:--apply 不是 Zotero 写回,它只更新本地标签体系文件;真正写回 Zotero 仍然必须走 Zotero dry-run 流程。新手建议前几次都停在 preview,不急着 apply。

如果你熟悉命令行,也可以直接运行下面这组三步:

python _skills/Classification-Governance-System/scripts/discover_open_tag_candidates.py --min-notes 1
python _skills/Classification-Governance-System/scripts/prioritize_open_tag_candidates.py
python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations

输出:

  • indexes/tag_taxonomy_open_candidates.md
  • indexes/tag_taxonomy_open_candidate_priority.md
  • indexes/tag_taxonomy_decision_preview_summary.md

在 tag_taxonomy_open_candidate_priority.md 里只改 operation 列:a 接受为正式标签,p 暂存观察,m 合并到 merge_target,r 丢弃到黑名单。确认无误后才运行:

python _skills/Classification-Governance-System/scripts/apply_tag_taxonomy_decisions.py --use-markdown-operations --apply

旧版审计报告仍可使用:

python _skills/Classification-Governance-System/scripts/build_tag_taxonomy_proposal.py
python _skills/Classification-Governance-System/scripts/build_tag_taxonomy_audit.py

Zotero 写回

写回功能默认是 dry-run。只有显式传 --apply 才会真实写入,并且 SQLite 写回会先备份数据库。公开版建议先只生成 dry-run 文件,不要急着写回。

python _skills/Classification-Governance-System/scripts/build_zotero_writeback_dryrun.py
python _skills/Classification-Governance-System/scripts/apply_zotero_writeback_sqlite.py --limit 5

真实写回前请先关闭 Zotero,并确认你已经备份本地数据库。

理论/方法/主题综述

python _skills/Theory-Method-Synthesis-System/scripts/build_classification_synthesis.py --dimension theory --tag 金融传染

综述草稿默认写入 notes/classification_synthesis。

配置说明

公开版所有路径都通过 .env、config/mindcite.json 或系统环境变量读取:

  • MINDCITE_ROOT:Vault 根目录;不填时默认当前仓库。
  • ZOTERO_DB_PATH:Zotero 本地数据库文件路径。
  • ZOTERO_SNAPSHOT_DB_PATH:可选的只读数据库快照路径。
  • ZOTERO_STORAGE_PATH:Zotero storage 文件夹路径,用来寻找 PDF 和全文缓存。
  • MINDCITE_LLM_PROVIDER:生成模型厂商,可选 deepseek、openai、qwen、zhipu、custom。
  • MINDCITE_EMBEDDING_PROVIDER:embedding 厂商,可选 siliconflow、openai、custom。
  • DEEPSEEK_API_KEY / OPENAI_API_KEY / DASHSCOPE_API_KEY / ZHIPU_API_KEY:对应厂商的生成模型 key。
  • SILICONFLOW_API_KEY:SiliconFlow embedding key;如果 embedding 也使用 OpenAI,则复用 OPENAI_API_KEY。
  • MINDCITE_CONFIG:可选的自定义配置文件路径。

LLM 与 embedding 的厂商、base URL、默认模型配置在 _skills/Zotero-Reading-System/config/reader_config.json。你可以通过 .env 改 *_MODEL 变量,也可以在 reader_config.json 里新增 OpenAI-compatible 厂商;真实 key 不要写进配置文件,只放 .env 或系统环境变量。

模型厂商示例

用途provider默认模型变量API key 变量
生成deepseekDEEPSEEK_MODEL=deepseek-chatDEEPSEEK_API_KEY
生成openaiOPENAI_MODEL=gpt-4o-miniOPENAI_API_KEY
生成qwenDASHSCOPE_MODEL=qwen-plusDASHSCOPE_API_KEY
生成zhipuZHIPU_MODEL=glm-4-flashZHIPU_API_KEY
生成customMINDCITE_LLM_MODELMINDCITE_LLM_API_KEY
EmbeddingsiliconflowSILICONFLOW_EMBEDDING_MODEL=BAAI/bge-m3SILICONFLOW_API_KEY
EmbeddingopenaiOPENAI_EMBEDDING_MODEL=text-embedding-3-smallOPENAI_API_KEY
EmbeddingcustomMINDCITE_EMBEDDING_MODELMINDCITE_EMBEDDING_API_KEY

安全底座

v0.2.0 开始,MindCite 把长期扩展风险显式拆出来;v0.3.0 进一步把分类体系变更变成可预览、可回滚、可黑名单化的治理流程:

  • schemas/:定义 index、reading status、note frontmatter、taxonomy、review queue 的数据契约。
  • _skills/common/safe_io.py:提供原子写入、备份和 quarantine。
  • tools/validate_data_contracts.py:校验 demo 或真实 Vault 是否符合当前契约。
  • tools/migrate.py:默认 dry-run,把旧数据升级到当前 schema_version。
  • tools/smoke_test.py:用 demo-vault 跑一遍回归检查。
  • tag_taxonomy_*:开放候选、优先级审计表和决策预览,正式改 taxonomy 前先留痕。

推荐在新增功能或迁移真实 Vault 前执行:

python tools/migrate.py --dry-run
python tools/smoke_test.py

真实迁移才使用:

python tools/migrate.py --apply

扩展新功能前,请先看 docs/extension-policy.md。

致谢与来源说明

MindCite 的部分工作流思想受到 GitHub 用户 cheneternity 的两个公开 Codex skill 仓库启发,包括 Zotero 到 Obsidian 的阅读工作流拆分,以及基于本地 Vault 笔记回答问题的原则。

本仓库不内置、不复制、不再分发上游仓库的文件或模板;公开版代码、配置层、数据契约、demo 数据、安全扫描和分类治理均为 MindCite 重新实现。详细说明见 NOTICE.md 和 Attribution Review。

常见问题

没有 PDF 怎么办?
精读流程会把条目标记为 needs_pdf,你补齐 PDF 或 Zotero 全文缓存后再继续。

没有全文缓存怎么办?
脚本会尝试回退到 PDF。若 PDF 也没有,就跳过并写日志。

API key 失败怎么办?
先确认 .env 是否存在、变量名是否正确、终端是否在仓库根目录运行。再确认 provider 额度和网络访问。

中文路径可以用吗?
可以,但建议 PowerShell 命令使用引号包住路径,Python 文件读写统一使用 UTF-8。

我可以直接上传自己的 Vault 吗?
不建议。请使用这个公开模板,再把自己的真实 notes、indexes、logs、PDF 和数据库留在本地。

How to Install

  1. Download the template file from GitHub
  2. Move it anywhere in your vault (or your sidebar notes)
  3. Open it in Obsidian — done!

Stats

Stars

49

Forks

6

License

MIT

Last updated 5mo ago