1. 项目概述:一个真正“本地优先”的学术研究协作者
OpenResearch 不是一个新发布的 SaaS 工具,也不是某个大厂刚推出的 AI 插件。它本质上是一套面向科研工作者的命令行原生(CLI-first)研究协作协议栈,核心目标非常明确:把论文阅读、文献管理、实验复现、笔记沉淀、团队协作这整条研究工作流,从云端服务器、中心化数据库、强制账户体系里彻底解耦出来,全部锚定在你本地的文件系统上。我第一次看到 orx init 命令时就意识到,这不是又一个“把 Notion 换个壳叫 Research OS”的营销概念——它用的是 Git 作为底层状态同步引擎,用的是纯文本 Markdown + YAML 元数据作为唯一数据格式,连 PDF 文献的解析结果都默认存成 .md 文件,而不是塞进某个黑盒数据库。关键词里的 “local-first” 不是宣传话术,而是整个架构的宪法级原则:所有操作必须能在离线状态下完成,所有数据必须能用 ls、grep、vim、git log 这些 POSIX 标准工具直接查看和修改。而 “autoresearch” 这个词,指的不是让 AI 自动生成论文,而是指系统能自动识别你本地代码仓库里的实验脚本、自动抓取你浏览器历史中打开过的 arXiv 页面、自动将你用 pdfgrep 搜索过的 PDF 片段打上标签并关联到对应笔记——它不替代你的思考,而是把你散落在终端、浏览器、文件夹里的“研究痕迹”,变成可追溯、可复用、可协作的知识资产。如果你每天花 2 小时在不同平台间复制粘贴参考文献、手动整理实验日志、为共享一个 Jupyter Notebook 而反复导出 HTML 或 PDF,那么 OpenResearch 的 CLI 设计哲学就是为你省下这 2 小时,并且确保十年后你还能用 cat 命令打开当年的实验记录。
2. 整体设计思路与技术选型逻辑
2.1 为什么选择 CLI 作为唯一交互入口?
很多人第一反应是:“现在都 2024 年了,还搞命令行?是不是太反人类?” 这恰恰是 OpenResearch 最关键的设计判断。我做过三年高校计算生物学实验室的技术支持,亲眼见过太多所谓“科研协作平台”死在 UI 上:一个功能按钮背后要调用 7 层 API,加载 3 个微服务,等 2 秒白屏,然后弹出“网络错误,请重试”。而 CLI 的确定性是碾压级的——orx search --tag "single-cell" --year 2023 这条命令,无论你在高铁上、飞机上、还是实验室断网的机房里,只要本地有索引,0.3 秒内必出结果。更重要的是,CLI 天然支持管道(pipe)、重定向(>)、脚本化(bash for loop)、与现有工具链无缝集成。比如,你可以写一行脚本:orx list --status draft | xargs -I {} orx export --format pdf {} > /tmp/drafts.pdf,一键把所有草稿导出为合集 PDF;也可以把 orx log --since "2 weeks ago" 的输出直接喂给 grep 或 awk 做定制化统计。这种能力,任何图形界面都做不到。更深层的原因是:科研工作本身就有极强的“批处理”属性——批量下载 200 篇 PDF、批量重命名实验数据文件、批量生成 LaTeX 参考文献条目。GUI 强制你一次点一个,CLI 让你一条命令搞定。所以 orx 不是“为了 CLI 而 CLI”,而是因为 CLI 是唯一能匹配科研工作内在节奏的交互范式。
2.2 “Local-first” 架构如何落地?Git 是它的脊椎骨
OpenResearch 的 “local-first” 不是靠加密本地存储实现的,而是通过一套精密的 Git 协同协议。它的核心机制是:每个用户本地都有一个完整的、自包含的 research repo,结构如下:
my-research/ ├── papers/ # 存放 PDF 和对应的 metadata.md ├── notes/ # 所有研究笔记,纯 Markdown ├── experiments/ # 实验脚本、配置、结果日志 ├── datasets/ # 数据集元信息(非原始数据,而是指向本地路径的 YAML) ├── .orx/ # OpenResearch 自己的配置和索引缓存(可 gitignore) └── .git/ # 标准 Git 仓库关键在于,orx sync 命令并不把你的数据上传到某台服务器,而是执行一个标准的 git push/pull 操作,目标可以是 GitHub、GitLab、私有 Gitea,甚至是你同事 U 盘里的一份 bare repo。所有冲突解决、版本回溯、分支管理,全部交给 Git 完成。这意味着:
- 你不需要信任任何第三方服务商的数据安全策略,因为你的数据始终在你自己的 Git 仓库里;
- 你不需要学习一套新的同步协议,Git 的 rebase、cherry-pick、bisect 全部可用;
- 当你的合作者用 orx add paper.pdf 时,系统会自动生成 papers/2024-05-12-arxiv-2405.12345.md,里面包含标题、作者、摘要、DOI、以及一个指向本地 PDF 的相对路径(如 ../raw-pdfs/arxiv-2405.12345.pdf),这个文件会被 Git 跟踪;
- 如果你删掉本地 PDF,orx status 会立刻标红提示 “broken link”,但不会自动删除 metadata.md——因为 Git 记录了这个文件的历史,你知道它曾经存在过。
这种设计牺牲了“实时协同编辑文档”的幻觉,换来了真正的数据主权和长期可维护性。我去年帮一个生物信息学课题组迁移旧文献库,他们原来用的某商业平台,导出数据时发现 30% 的 PDF 元数据丢失,而用 orx export --format bib 从 Git 历史里拉出来的 BibTeX,字段完整率是 100%。
2.3 Autoresearch 的自动化边界在哪里?它只做“连接”,不做“决策”
网络热词里频繁出现的 “autoresearch”,常被误解为“AI 自动写论文”。OpenResearch 对此有清醒的划界:它绝不生成任何研究结论,它的自动化只发生在“连接”层面。具体来说,它通过三类钩子(hook)实现自动化:
- 文件系统钩子:监听 downloads/ 目录,一旦检测到新 PDF,自动运行 pdftotext + grobid 提取元数据,生成对应的 metadata.md;
- 终端钩子:当你在 shell 里执行 python train.py --config config.yaml 时,orx watch 会捕获该命令、记录时间戳、抓取 config.yaml 内容快照、并将 stdout/stderr 重定向到 experiments/20240512-1423-train.log;
- 浏览器钩子:通过一个轻量级浏览器扩展(仅需读取当前页面 URL 和标题),当访问 arXiv、PubMed、IEEE Xplore 页面时,点击扩展图标,orx import 会自动下载 PDF(如果允许)、提取 DOI、生成 metadata.md,并关联到你当前所在的 research repo 分支。
注意,所有这些动作都不依赖云端 AI 模型。PDF 解析用的是本地部署的 Grobid(Java 进程),文本摘要用的是 spaCy 的规则抽取(非 LLM),实验日志分析用的是正则匹配预定义模式(如 “Accuracy: (\d+.\d+)”)。它的自动化是“确定性的、可审计的、可关闭的”。你可以随时在 .orx/config.yml 里关掉任意一个 hook,或者用 orx hook list 查看所有已启用的自动化规则。这种克制,恰恰是它能在严肃科研场景落地的根本原因——评审专家不会因为你用了“AI”,就认可你的方法论;但他们一定会因为你提供了完整的、可复现的、带时间戳的操作日志,而相信你的实验过程。
3. 核心功能拆解与实操细节
3.1 初始化与环境搭建:5 分钟建立你的第一个 research repo
安装 orx CLI 本身极其简单,官方推荐方式是通过 Rust 的包管理器 cargo(因为 orx 是用 Rust 编写的,性能和内存安全是刚需):
# 确保已安装 Rust(官网 rustup.rs 一键安装) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env # 安装 orx(自动编译,约 30 秒) cargo install orx-cli # 验证安装 orx --version # 输出类似:orx-cli 0.8.3 (commit abc1234)提示:不要用 pip install orx 或 brew install orx。前者是早期 Python 版本(已废弃),后者打包时可能遗漏本地依赖(如 grobid 的 Java 运行时)。Cargo 安装能确保所有二进制依赖(包括内置的 grobid server)都被正确链接。
初始化一个新项目:
# 创建目录并进入 mkdir my-phd-project && cd my-phd-project # 初始化 research repo(会创建 .git 和 .orx 目录) orx init --name "PhD Thesis: Neural Dynamics in C. elegans" # 查看初始结构 tree -L 2 # . # ├── .git # ├── .orx # ├── datasets # ├── experiments # ├── notes # └── papers此时,orx 并没有创建任何“云账户”,也没有联网。它只是在本地初始化了一个 Git 仓库,并在 .orx/config.yml 中写入了基础配置:
# .orx/config.yml project_name: "PhD Thesis: Neural Dynamics in C. elegans" default_branch: main hooks: filesystem: enabled: true watch_dirs: ["downloads/"] terminal: enabled: true capture_commands: ["python", "jupyter", "Rscript"] browser: enabled: false # 浏览器扩展需单独安装你可以立即开始使用。比如,把一篇 PDF 拖进 downloads/ 目录,几秒后,papers/ 下就会多出一个按日期和 arXiv ID 命名的 .md 文件。这就是 “local-first” 的第一触感:没有注册、没有等待、没有权限申请,你的研究资产从第一秒起就完全属于你。
3.2 文献管理:从 PDF 到可搜索、可关联的知识图谱
OpenResearch 的文献管理不是简单的 PDF 文件夹。它的核心是构建一个基于纯文本的、双向链接的知识网络。当你执行 orx add paper.pdf 时,实际发生了以下步骤:
- PDF 解析:启动内置的 Grobid 服务(首次运行会自动下载 ~150MB 的模型文件到 ~/.orx/grobid/),提取标题、作者、摘要、参考文献列表;
- 元数据生成:根据提取结果,生成一个 YAML front matter 的 Markdown 文件,例如
papers/2024-05-12-arxiv-2405.12345.md:
--- title: "Neural Circuit Reconstruction from Electron Microscopy Volumes" authors: - "Smith, J." - "Lee, A." - "Chen, Y." doi: "10.48550/arXiv.2405.12345" arxiv_id: "2405.12345" year: 2024 tags: ["connectomics", "EM", "segmentation"] related_to: ["papers/2023-08-01-nature-12345.md"] --- This work presents a novel graph neural network...- 反向索引构建:orx index 命令会扫描所有 .md 文件,建立全文索引(基于 tantivy 库,比 SQLite FTS 更快),同时解析 YAML 中的 tags 和 related_to 字段,构建轻量级知识图谱。
实操中,最常用的是搜索:
# 按标签搜索(精确匹配) orx search --tag connectomics # 按年份和关键词模糊搜索 orx search --year 2023 --query "synaptic cleft" # 按引用关系搜索(找出所有引用了这篇论文的文献) orx search --cited-by "2405.12345" # 组合搜索:2024 年,带 'GNN' 标签,且与 'EM' 相关的论文 orx search --year 2024 --tag gnn --related-to em注意:所有搜索都在本地完成,响应时间取决于你的 SSD 速度,通常 < 100ms。索引文件(.orx/index/)是二进制的,但你可以用 orx index --dump 查看其结构,确认它没有上传任何数据到外部。
一个关键技巧:利用 Markdown 的原生链接语法,在笔记中手动建立深度关联。比如在notes/circuit-analysis.md里写:
Smith et al. ( 2024-05-12-arxiv-2405.12345 ) 提出的 GNN 架构,与我们之前复现的 Chen 2023 方法形成对比...
orx 不会自动解析这些链接,但它会在 orx graph 命令中将它们可视化为节点图(用 Graphviz 渲染),让你一眼看出知识脉络。这种“人写链接,机器绘图”的模式,比任何自动图谱生成都更准确、更可控。
3.3 实验追踪:让每一次 run 都留下不可篡改的证据链
这是 OpenResearch 区别于其他工具的杀手级功能。传统做法是:在 Jupyter Notebook 里写代码,跑完截图结果,再手动复制参数到 Word 文档。orx 的方案是:把整个实验过程变成一个 Git commit。
假设你有一个训练脚本experiments/train-resnet.py:
# experiments/train-resnet.py import argparse parser = argparse.ArgumentParser() parser.add_argument("--lr", type=float, default=0.01) parser.add_argument("--epochs", type=int, default=10) args = parser.parse_args() print(f"Training ResNet with lr={args.lr}, epochs={args.epochs}") # ... 训练逻辑正常运行:python experiments/train-resnet.py --lr 0.001 --epochs 50
用 orx 追踪:orx run python experiments/train-resnet.py --lr 0.001 --epochs 50
orx run 会做四件事:
- 捕获完整命令行:记录
python experiments/train-resnet.py --lr 0.001 --epochs 50; - 快照代码状态:对 experiments/ 目录执行 git stash,保存当前未提交的代码变更;
- 重定向 I/O:将 stdout/stderr 写入
experiments/20240512-1423-train-resnet.log,并将该 log 文件加入 Git 暂存区; - 生成实验元数据:创建
experiments/20240512-1423-train-resnet.md,内容如下:
--- command: "python experiments/train-resnet.py --lr 0.001 --epochs 50" started_at: "2024-05-12T14:23:45Z" finished_at: "2024-05-12T14:45:22Z" duration_sec: 1297 exit_code: 0 git_commit: "abc1234 (main)" code_snapshot: "experiments/train-resnet.py@abc1234" log_file: "20240512-1423-train-resnet.log" metrics: - name: "final_accuracy" value: 0.923 unit: "%" ---最关键的是,orx run 最后会执行git commit -m "run: train-resnet.py lr=0.001 epochs=50"。这意味着:
- 你的实验记录和代码变更永远绑定在一起;
git log --oneline就是你完整的实验时间线;git checkout <commit-hash>就能回到那次实验的精确环境;orx log --since "1 month ago"会列出所有近期实验,并高亮显示 metrics 中的关键数值。
我曾用这个功能帮一位博士生定位一个持续两周的 bug:他发现模型精度突然下降,用 orx log 发现问题出现在 5 月 3 日的一次 commit,git diff <that-commit>显示他不小心把数据增强的随机种子从 42 改成了 0,导致训练集划分不稳定。没有 orx,他可能还在怀疑 GPU 驱动或 PyTorch 版本。
3.4 团队协作:用 Git Flow 实现零摩擦知识共享
OpenResearch 不提供“在线协作文档”或“实时聊天室”,它的协作哲学是:“先保证各自工作流的完整性,再通过 Git 同步知识”。典型工作流如下:
- 主干稳定(main branch):存放经过验证的、可复现的论文草稿、稳定版实验脚本、已发表文献的最终 metadata;
- 特性分支(feature/*):每个成员在自己的分支上工作,例如
feature/john-gnn-tuning; - Pull Request(PR):当 John 完成他的 GNN 调优实验,他推送分支并创建 PR。PR 描述里会包含 orx log --branch feature/john-gnn-tuning 的输出,展示所有相关实验;
- CI 验证(可选):在 CI 脚本里加入
orx verify --branch $PR_BRANCH,自动检查新添加的论文 metadata 是否格式合规、新实验 log 是否包含必需的 metrics 字段; - 合并与归档:PR 合并后,所有实验记录、笔记、文献元数据都成为 main branch 的一部分,永久可查。
一个真实案例:我们一个三人小组合作写综述,每人负责一个章节。Alice 在feature/alice-neuro分支写神经科学部分,她用 orx add 下载了 15 篇新论文,写了 3 篇深度笔记;Bob 在feature/bob-ai分支写 AI 方法部分,他复现了 2 篇论文并用 orx run 记录了所有超参;Charlie 负责整合,他 checkout main,然后git merge feature/alice-neuro feature/bob-ai,再用 orx graph 生成整篇综述的知识图谱,发现 Alice 引用的某篇 2018 年论文,与 Bob 复现的 2023 年模型存在方法论上的承继关系——这个洞见直接催生了综述中的一个全新小节。整个过程,没有一次“共享链接失效”,没有一次“版本覆盖”,没有一次“谁改了我的文档”。
4. 常见问题与排查技巧实录
4.1 “Unable to locate the codex cli binary” 类错误的根源与解法
网络热词中高频出现的 “unable to locate the codex cli binary” 错误,本质是混淆了两个完全不同的工具链。Codex CLI 是 GitHub Copilot 的配套命令行工具,它需要 Node.js 环境和特定的认证 token。而 OpenResearch 的 orx CLI 是独立的 Rust 二进制,它不依赖任何外部 CLI。如果你在安装 orx 后,运行其他工具(如某个 VS Code 插件)时看到这个错误,那问题一定出在那个插件的配置上,与 orx 无关。
但 orx 自身确实会有类似报错,最常见的是:
orx add paper.pdf Error: Failed to start Grobid server. Unable to locate the grobid binary.这表示 orx 内置的 Grobid 服务启动失败。排查步骤:
检查本地 Grobid 状态:
# 查看 orx 是否在尝试启动 Grobid ps aux | grep grobid # 如果没进程,手动启动测试 ~/.orx/grobid/bin/start.sh验证 Java 环境:Grobid 需要 Java 11+。运行
java -version,确保输出类似openjdk version "11.0.22"。如果提示 command not found,安装 Adoptium Temurin JDK。检查磁盘空间:Grobid 模型文件约 150MB,且运行时需要 ~2GB 内存。用
df -h ~/.orx和free -h确认。重置 Grobid(终极方案):
rm -rf ~/.orx/grobid orx add paper.pdf # orx 会自动重新下载
实操心得:我在 M1 Mac 上首次遇到此问题,原因是 Rosetta 2 兼容性。解决方案是:
arch -x86_64 ~/.orx/grobid/bin/start.sh强制用 x86 模式启动。后来 orx 0.8.2 版本已修复 ARM 原生支持,升级即可。
4.2 Windows 终端环境下 orx --version 正常但功能异常的典型场景
Windows 用户常报告:orx --version能正常输出,但orx search却报错 “Permission denied” 或 “Cannot create directory”。这几乎 100% 是 Windows Defender 或第三方杀毒软件拦截了 orx 创建临时文件或启动子进程(如 Grobid)。
排查与解决:
临时禁用实时保护:在 Windows 安全中心 > 病毒和威胁防护 > 管理设置 > 关闭“实时保护”,然后重试 orx 命令。如果成功,说明是杀软拦截。
添加排除项:将以下路径添加到 Windows Defender 排除列表:
C:\Users\<YourName>\.orx\C:\Users\<YourName>\.cargo\bin\orx.exe
避免 PowerShell ISE:PowerShell ISE 有已知的进程启动限制。务必使用 Windows Terminal 或标准 PowerShell 控制台。
路径长度问题:Windows 默认路径长度限制为 260 字符。如果 research repo 路径很深(如
C:\Users\John\Documents\My PhD Research\Chapter 3\Experiments\...),orx 可能无法创建嵌套目录。解决方案:启用长路径支持(组策略编辑器 > 计算机配置 > 管理模板 > 系统 > 文件系统 > 启用 Win32 长路径)。
4.3 “Autoresearch” 钩子失效的 3 个隐蔽原因
即使 orx init 成功,钩子也可能静默失效。以下是我在 12 个实验室部署中总结的三大原因:
| 原因 | 表象 | 检查命令 | 解决方案 |
|---|---|---|---|
| 文件系统监控权限不足 | orx watch无反应,downloads/新增 PDF 不触发 | orx hook list显示 filesystem hook 状态为disabled | Linux/macOS:sudo sysctl fs.inotify.max_user_watches=524288;Windows:确保downloads/在 NTFS 分区,而非 OneDrive 同步文件夹 |
| 终端钩子未捕获 shell 类型 | orx run正常,但orx watch不记录普通python script.py命令 | echo $SHELL输出/bin/zsh,但.orx/config.yml中capture_commands只列了["python"] | 编辑.orx/config.yml,在capture_commands中添加你的 shell 名称(如"zsh"),或使用通配符"*python*" |
| 浏览器扩展未正确授权 | 点击扩展图标无反应,orx import 不出现 | 在浏览器地址栏输入chrome://extensions/,检查扩展是否启用,且“站点访问权限”设为 “On all sites” | 重新安装官方扩展(从 orx 官网下载 .crx),安装时勾选 “Allow access to file URLs” |
一个血泪教训:某位教授的笔记本电脑预装了 McAfee,它会静默阻止所有未经签名的本地 HTTP 服务(包括 orx 内置的 Grobid)。症状是
orx add卡住 30 秒后超时。解决方案不是卸载 McAfee,而是用orx config set grobid_url http://localhost:8080指向一个已运行的、McAfee 白名单内的 Grobid 实例(我们用 Docker 部署了一个)。
4.4 性能瓶颈诊断:当 orx search 变慢时,如何精准定位?
orx search理论上应 < 100ms,如果变慢,90% 的情况是索引损坏或磁盘 I/O 瓶颈。诊断流程:
基准测试:先测纯文本搜索速度
time orx search --query "neural" --limit 1 # 如果 > 500ms,问题在索引层检查索引健康度:
orx index --stats # 输出类似: # Total documents: 1247 # Index size: 42.3 MB # Last indexed: 2024-05-12 14:23:01 UTC # Corrupted files: 0如果
Corrupted files > 0,运行orx index --rebuild。排除磁盘因素:用
iostat -x 1(Linux/macOS)或资源监视器(Windows)观察磁盘 %util。如果持续 > 90%,说明 SSD 已成瓶颈,考虑将.orx/index/目录软链接到更快的 NVMe 盘:mv ~/.orx/index ~/fast-ssd/orx-index ln -s ~/fast-ssd/orx-index ~/.orx/index终极手段:降级索引粒度。如果文献库超过 5000 篇,全文索引可能过大。编辑
.orx/config.yml:index: include_content: false # 只索引 YAML front matter,不索引正文 fields: ["title", "authors", "abstract", "tags"]这会让搜索速度提升 3 倍,代价是无法在论文正文中搜索关键词。对于大多数文献管理场景,这已足够。
5. 进阶应用与生态扩展
5.1 与现有科研工具链的深度集成
OpenResearch 的强大之处,在于它不是一个封闭系统,而是一个“胶水层”。以下是几个经过实测的集成方案:
VS Code 深度整合:
- 安装官方
orx-vscode插件; - 在
settings.json中配置:"orx.cliPath": "/home/user/.cargo/bin/orx", "orx.projectRoot": "${workspaceFolder}" - 效果:右键 Markdown 笔记 → “Orx: Link to Paper”,自动插入相对路径链接;Ctrl+Click 链接 → 在侧边栏预览 PDF;命令面板输入 “Orx: Search Papers” → 调出搜索框,结果直接插入当前文档。
LaTeX 工作流自动化:
在你的 thesis.tex 顶部添加:
% !TEX root = ../main.tex % !ORX-BIBLIOGRAPHY: papers/*.md然后编写一个 Makefile:
thesis.pdf: thesis.tex $(shell orx export --format bib --output refs.bib) pdflatex thesis.tex bibtex thesis pdflatex thesis.tex pdflatex thesis.tex每次make时,orx export 会扫描所有 papers/*.md,提取 DOI 和 arXiv ID,调用 crossref API 或 arXiv API 获取最新 BibTeX 条目,生成 refs.bib。这样,你的参考文献库永远与本地 metadata 同步,无需手动维护 .bib 文件。
Jupyter Notebook 实验复现:
在 notebook 第一个 cell 加入:
# %%orx-run # This cell's execution will be tracked by orx import os os.environ['ORX_EXPERIMENT_NAME'] = 'notebook-20240512'然后运行orx jupyter启动 notebook。所有后续执行的 cell,其代码、输出、时间戳都会被 orx 捕获并生成实验记录。比 nbstripout 更细粒度,比 papermill 更轻量。
5.2 安全与合规实践:如何满足机构 IRB 和数据政策
很多高校和研究所要求研究数据必须符合 GDPR 或 HIPAA。OpenResearch 的 local-first 架构天然适配,但需主动配置:
敏感数据隔离:在
.gitignore中添加datasets/private/,并在.orx/config.yml中设置:datasets: ignore_patterns: ["private/**", "raw-scans/**"]这样 orx list 不会显示这些目录,orx sync 也不会推送。
元数据脱敏:对含 PHI(个人健康信息)的论文,用 orx edit papers/2024-05-12-phi-study.md,手动删除 authors 列表中的真实姓名,替换为 “Author Group A”,并在 YAML 中添加
is_anonymized: true。审计日志导出:
orx log --format json --since "2024-01-01" > audit-2024-q1.json。该 JSON 包含所有 orx 命令、时间戳、操作者(从 Git config 读取)、影响的文件列表,可直接提交给 IRB 委员会。
我服务的一个医学影像课题组,用这套方案通过了 NIH 的数据管理审查。评审员特别赞赏:“你们没有把数据‘上传’到任何第三方,所有操作日志都是标准 Git 日志,我们用 git verify-log 就能验证其完整性。”
5.3 未来演进:CLI 工具链的模块化趋势
OpenResearch 的下一个大版本(v1.0)将采用插件化架构。核心 orx-cli 只保留init,search,add,run,sync这 5 个原子命令,所有高级功能(如 PDF OCR、LLM 辅助摘要、跨 repo 图谱)都将作为独立插件发布:
orx-plugin-ocr: 调用 Tesseract,为扫描版 PDF 生成可搜索文本层;orx-plugin-llm: 本地运行 Ollama 的llama3模型,对笔记进行摘要或问答;orx-plugin-crossrepo: 在多个 research repo 间建立引用关系,生成机构级知识图谱。
插件通过orx plugin install orx-plugin-llm安装,所有插件二进制存放在~/.orx/plugins/,且必须通过orx plugin verify签名验证。这种设计既保持了核心 CLI 的极简和稳定,又为社区创新留出空间。它代表了一种新范式:科研工具不应是“大而全”的操作系统,而应是“小而专”的乐高积木。你不需要一个能做一切的工具,你只需要在需要时,咔嗒一声,接上一块恰好匹配你当前需求的积木。
我在实际使用中发现,最有效的组合是orx-cli+orx-plugin-ocr+ VS Code 插件。三者加起来不到 50MB,却覆盖了从文献获取、OCR 处理、笔记写作到论文输出的全链条。它不承诺取代你的思考,它只承诺:当你灵光一现时,那个想法,一定能被干净、快速、永久地,钉在你的知识宇宙里。