1实现原理 · 为什么它能做到
整个产品不是可执行程序而是 82 个 Markdown『技能』(SKILL.md):安装即把每个技能目录软链到项目的 .claude/skills/<name>,靠宿主 CLI 的斜杠命令发现机制装载,行为全部由 prompt 编排 + 少量确定性脚本兑现。
bash Auto-claude-code-research-in-sleep/tools/install_aris.sh ~/your-project # symlinks ARIS skills into <project>/.claude/skills/
旗舰入口 /research-pipeline 把五个阶段串成一条链(idea-discovery → experiment-bridge → auto-review-loop → summary → paper-writing),每个阶段的执行状态与『验收状态』分开落盘到 .aris/runs/<run_id>.json,因此中断后可续跑而不是重来。
- **RESUMABLE = true** — When `true` (default), the pipeline records per-stage state to `.aris/runs/<run_id>.json` so a crashed/interrupted run can resume via `/research-pipeline — resume <run_id>` instead of restarting. Stage status splits `done` (executor finished writing) from `accepted` (the stage's cross-model gate / deterministic verifier passed); resume re-validates any `done`-but-unaccepted stage. See `shared-references/resumable-runs.md`.
『睡觉跑』的形态是:Stage 1 白天/傍晚做选题,Stage 2-3(实现实验 + 自主评审循环)无人值守跑;Stage 3 就是 /auto-review-loop 内部自带的多轮循环(默认 4 轮、分数≥6 且 verdict∈{ready,almost} 才停),不需要外部定时器。
**Sweet spot**: Run Stage 1 in the evening, launch Stage 2-3 before bed, wake up to a reviewed paper.
对『外部定时器』有明确的宪法级约束:定时/心跳只能负责何时唤醒与推进工作,永远不能判定工作好坏;心跳若发现停滞只允许改变结构方向或升级给人,不允许宣布『够好了』。
One-liner: **a heartbeat may say "keep going," never "good enough."**
无人值守时的存活与监控靠确定性守护进程:GPU 服务器上跑一个只用标准库 + nvidia-smi 的 watchdog 守护,按任务类型产出 DEAD/IDLE/STALLED/STALE 告警,并汇总成 summary.txt 供低频轮询。
A lightweight Python daemon that runs on each GPU server, continuously monitoring all registered tasks. Zero dependencies beyond Python 3 standard library + `nvidia-smi`.
『为什么评审算数』的机制是跨模型陪审团:执行器(Claude / Codex / Cursor / Antigravity / Copilot CLI)写代码写论文,审查器必须是另一家族模型(Codex MCP 的 GPT-6-Astra、或 claude-review / gemini-review MCP、或 Copilot 原生 rubber-duck),并且每条评审调用的线程/追踪 id 会被留档。
Executor (Claude / Codex / Cursor / Antigravity / Copilot CLI) writes code & papers; reviewer (GPT-6-Astra via Codex MCP, Claude / Gemini via `claude-review` / `gemini-review` MCP, or Copilot's evidence-gated native complementary reviewer for `/auto-review-loop`) critiques independently.
『模型混搭层』是双层的:执行器走宿主自己的 ANTHROPIC_* / 各厂商兼容端点环境变量,审查器走随仓库发布的 MCP 桥(llm-chat / minimax-chat / gemini-review / claude-review),于是执行与审查可以用完全不同的厂商与密钥。
本指南说明如何自由搭配 Claude Code 执行器和外部审查器的 API。
真正跑实验的部分靠 Bash 直接指挥远程/租用算力:ssh + rsync + screen 部署,或 vast.ai 租实例(含自动销毁与预算提示)、或 Modal 无服务器 GPU;判据来自项目 CLAUDE.md 里的 gpu: local|remote|vast|modal。
- **Vast.ai** (`gpu: vast`): Check for `vast-instances.json` at project root — if a running instance exists, use it. Also check `CLAUDE.md` for a `## Vast.ai` section.
给 agent 看的仓库入口是 AGENT_GUIDE.md(面向 LLM 的结构化路由索引),并显式声明『SKILL.md 才是规格,指南与 SKILL.md 冲突时以 SKILL.md 为准』——降低长仓库里的叙事漂移。
> **Source of Truth.** This file is a *routing index*, not a specification.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | codex(OpenAI Codex CLI,`codex exec` 子进程) |
| cli | vastai(vast.ai 租机 CLI) |
| cli | modal(Modal 无服务器 GPU) |
| cli | ssh / rsync / screen / nvidia-smi(远程 GPU 服务器部署与巡检) |
| cli | rsync 代码同步(远端部署路径之一) |
| cli | LaTeX 工具链(latexmk / pdfinfo / pdffonts,论文编译与体检) |
| api | Anthropic 兼容端点(执行器侧,可用官方或第三方兼容网关) |
| api | OpenAI 兼容 LLM API(llm-chat MCP,可指向 OpenAI/DeepSeek/Kimi/MiniMax/自建兼容端点) |
| api | DeepSeek(经 llm-chat 作为审查器后端) |
| api | Moonshot / Kimi(经 llm-chat 作为审查器后端) |
| api | MiniMax Chat(minimax-chat MCP,/auto-review-loop-minimax 的专用后端) |
| api | Google Gemini(gemini-review MCP,直接 API 生成端点) |
| api | Feishu / Lark 机器人 webhook(推送通知) |
| api | Exa 搜索 API(exa-py SDK;/exa-search 与 /research-lit 的 sources: exa) |
| api | Semantic Scholar Graph API(论文检索) |
| api | OpenAlex API(引用图谱检索) |
| api | arXiv(元数据 API + PDF 下载) |
| api | CrossRef / DBLP(真实 BibTeX 校验,反幻觉引用) |
| api | Weights & Biases(训练曲线回读;由 monitor-experiment / training-check 调用) |
| api | Overleaf Git 桥(论文双向同步,凭 keychain/token) |
| network | 本地 HTTP 服务(人工审查 MCP 在 127.0.0.1 开浏览器审批页;飞书桥默认 5000 端口) |
| package | lark-oapi(Python 飞书 SDK,feishu-bridge 依赖) |
| package | httpx(llm-chat / minimax-chat 的 HTTP 客户端) |
| package | deepxiv-sdk(可选:渐进式论文阅读技能 /deepxiv) |
4风险提醒 风险提醒:橙色 · 评估后使用
- 夜间免打扰配置会显著放大无人监督时的执行权限 — README 直接教用户在 .claude/settings.local.json 放行 mcp__codex__codex / mcp__codex__codex-reply / Write / Edit / Skill(auto-review-loop),配合技能声明的 Bash(*) 工具面,等于让 agent 在你睡觉时无需确认地写文件、跑 shell、调外部模型。风险不在 skill 有恶意,而在『错误判断 + 无人在场 + 无确认』三者叠加时的损失上限(覆盖项目文件、在远程机器上执行、持续消耗 API 与 GPU 预算)。建议把放行范围缩到具体命令、保留 human checkpoint 或飞书审批。
- 凭证集中在一个自动化管道里,泄露爆炸半径大 — 同一套流程会接触执行器/审查器 API key(Anthropic/OpenAI/DeepSeek/Kimi/MiniMax/Gemini)、Exa、W&B、Codex 与 Gemini 本地配置、飞书 App Secret、vastai 与 Modal 的 token、Overleaf token;任一处被写进日志、通知卡片或被提示注入诱导外泄,影响面跨多个付费账号。仓库已做部分防护(.env 入 .gitignore、通知规则禁止带密钥、overleaf_audit.sh 扫泄漏、gemini env 文件做属主/权限校验),但用户自建的 settings.json 与远程机器上的 .env 仍需自行收紧。
- 远程机器与租用算力的数据/成本边界由用户自己兜 — 技能会把项目代码 rsync 到用户服务器、在 vast.ai 新租的实例上 apt/pip 安装依赖并执行用户代码;vast.ai 默认 auto_destroy 但可关,max_budget 是可选提示而非硬闸;Modal 文档自己也提醒不要在 CLI 输入付款信息。无人值守跑偏(例如实验脚本错误地重复启动)直接转化为真金白银。
- 注入面真实存在且只能被『降低』而非消除 — 论文摘要、网页正文、评审返回文本、社区 PR 的 SKILL.md、研究记忆节点都会被回灌进上下文。threat_scan 是正则层(文档自认『干净扫描≠安全』),语义投毒只能靠跨模型 reviewer 兜;且其对 web/tool 内容默认只 warn,真正的 block 只在用户可介入的写入路径生效。
- 体量与耦合度带来的可维护性成本 — 1794 行 README + 82 技能 + 63 测试 + 40 个 tools 脚本 + 24 份契约文档,且大量行为通过四层 helper 解析链在『技能散文 → 脚本』之间耦合;仓库自己记录了多起因 prose-only 集成静默失效的事故(integration-contract.md 开头的两个 bug)。用户若想裁剪到只用一两个技能,需要理解这套约定才不会踩到静默失败。
- 『自主科研』产出的可信度仍需人来把关 — README 自己声明高分是 AI-review 循环的预期副产品('high AI scores are an expected byproduct, not proof of acceptance'),社区展示的分数来自 CSPaper / Stanford Agentic Reviewer 等 AI 信号而非录用结果。把它当作效率放大器可以,当作成果背书不行。
5第二遍独立确认
- [ok] skill.path 定位(旗舰入口选择) — 候选与判据:① 仓库根——glob 确认无 SKILL.md、无 plugin.json/.claude-plugin 清单,且 skills/ 下是 82 个平级技能目录(多入口多技能插件),按共享路径规则不取根;② skills/research-pipeline——README 快速开始的单命令总入口写的是 `/research-pipeline "your research direction" # Full pipeline: Workflow 1 → 1.5 → 2 → 3 end-to-end`,docs/SKILLS_CATALOG.md 的『🏗️ Workflow Orchestrators』一节以 '**Most users start here.**' 开头并把 /research-pipeline 列为第一条('**Full chain** — Workflow 1 → 1.5 → 2 → 3, from research direction to submission-ready paper'),AGENT_GUIDE.md 亦写 'Main chain: /research-pipeline = W1 → W1.5 → W2 → W3'——三处独立证据一致指向它;③ skills/idea-discovery(W1)与 skills/auto-review-loop(W2,『睡觉跑』本体)——都是它的下游子技能,按『never a sibling sub-skill』规则不取。结论:取 skills/research-pipeline 作为旗舰条目。
- [ok] pin commit 与本地工作副本一致 — git rev-parse HEAD 输出 15b9b27de6e265a058e875bbf15b09bf8a522aa3,与任务给定 pin 逐字符相同;未执行任何写操作。
- [ok] license 元数据 — 仓库根 LICENSE 首行 'MIT License'、'Copyright (c) 2026 wanshuiyin',与任务给定 MIT 一致。
- [ok] 『82 skills』声明的真实性 — skills/ 下 86 个目录 − 4 个非技能目录(shared-references 与三个 skills-codex* 镜像/叠加层)= 82,与 README:612 与 docs/SKILLS_CATALOG.md 的 82 完全对齐;README 顶部另一处提到 '81 bundled skills' 指的是 ARIS-Code CLI 二进制内置包,与本仓库 main 树的 82 个目录不是同一口径,已在结论中按 main 树口径采信。
- [ok] 外部依赖:codex 审查器确实是本地子进程而非文档承诺 — mcp-servers/codex-exec/server.py 源码含 `argv = [CODEX_BIN, "exec"]`、`subprocess.Popen(argv, ...)`、`shutil.which(CODEX_BIN)`,且 CODEX_BIN 默认为 'codex';README/AGENT_GUIDE 关于『codex-cli 0.154 删除 codex mcp-server 后由本仓库自带桥接管』的叙述与代码一致。
- [ok] 外部依赖:审查器端点逐个可定位 — LLM(llm-chat)、MiniMax、Gemini 三处端点均来自各自 server.py 的 os.environ 默认值或请求构造行;Exa 走 SDK(仅 EXA_API_KEY + exa-py 可见,无硬编码域名,已在 endpoint 字段标明 exa.ai 而非杜撰 API 路径);arXiv/CrossRef/S2/OpenAlex 均命中 tools/*.py 的常量。
- [discrepancy] 凭证读取:是否存在未披露的密钥读取 — 第一遍只列了环境变量与 ~/.gemini/.env、~/.claude/feishu.json。第二遍补到三处未在首轮列出的读取面:① ~/.codex/config.toml(README 明确 reviewer 模型来源,属读取用户 LLM 凭证/配置);② ~/.modal.toml 与 vastai 的 API key 文件(serverless-modal / vast-gpu 技能要求);③ 全局指针 ~/.aris/repo 与项目 .aris/installed-skills.txt(被技能 bash 块读取以解析 helper 路径)。三者均为『本地配置/凭证文件读取』,已并入 security.credential_reads,结论档位不变(橙色本就因凭证接触面)。
- [ok] 注入面:是否真的做了防御而非只在文档里写 — tools/threat_scan.py 实现存在(regex、scope all/context/strict、quarantine 返回占位符 + findings),且 skills/idea-creator/SKILL.md 的 'ARIS_QUERY_PACK_SCAN_START … END' bash 块真的解析并调用它、扫描失败时跳过 wiki 上下文;skills/shared-references/injection-hygiene.md 给出『干净扫描≠安全』与分档 warn/block 规则。防御是落地的,不是宣言。
6结论
bbe5d4e4e1f79f79…15b9b27de6