本方案要支持一种简单、可靠、学生真的愿意使用的科研协作方式:
学生在本地或服务器使用 agent 做真实科研工作;导师、同学和合作者在 GitHub 看到经过整理的项目进展,提出建议,review 变更,并参与协作。
这里的 GitHub 不是完整科研工作区,也不是所有事实的存储地。它更像一个面向合作者的“项目记忆层”:只保存经过压缩、整理和确认的信息。
本地工作区保留完整事实,包括数据、代码、实验日志、模型 checkpoint、agent 轨迹和内部笔记。GitHub 只暴露合作者需要看到、可以讨论、可以审计的摘要。
一句话版本:
本地 agent 产出事实和草稿;学生确认要不要同步;GitHub Issues 收建议,Pull Requests 更新正式项目记忆,
status.html展示当前状态。
这个功能应采用:
Skill required
GitHub conventions required
File templates required
MCP/worker 不做
Extension UI 不做
含义是:
- 核心行为放在
.codex/skills/research-memory/SKILL.md,由 Skill 约束 agent 的确认、证据等级和 GitHub 同步边界。 - GitHub 约定承载协作面:issue 收反馈,PR 承载正式记忆变更,状态文件和 artifact 记录走模板。
- 文件模板放在
docs/templates/research-memory/,agent 只基于确认过的信息填写模板。 - 不再提供旧的项目记忆后端服务,也不在 GUI/agent runtime 中自动接入项目记忆服务。
- 不新增 extension UI。GitHub、PR、issue 和 chat 已经能承载 MVP 的人类交互。
GUI 的职责应该保持很薄:
- 聊天。
- 设置。
- 必要确认。
- 显示 agent 运行状态。
其他能力尽量由 agent 通过普通文件编辑、GitHub CLI/API 草稿和人工确认完成。
科研工作的完整事实应该留在本地或服务器环境中。
包括:
- 原始数据。
- 处理后数据。
- 代码和实验配置。
- 完整实验日志。
- 模型 checkpoint。
- agent trajectory。
- 内部笔记和临时想法。
- 合作方敏感信息。
GitHub 上的内容只是“可协作摘要”,不是完整事实本身。
GitHub 应该帮助合作者快速理解:
- 项目现在处于什么阶段。
- 最近发生了哪些重要变化。
- 哪些实验支持或削弱了当前假设。
- 当前 blocker 是什么。
- 哪里需要合作者输入。
- 哪些决策已经做出。
GitHub 不应该存放:
- 原始数据。
- 完整实验日志。
- checkpoint。
- 密钥或凭证。
- 服务器路径。
- 完整 agent scratchpad。
- 未经确认的强科学结论。
Agent 可以执行任务、总结进展、生成草稿、提出判断,但不应该替代学生决定项目正式状态。
学生需要确认:
- 哪些本地进展值得同步到 GitHub。
- 哪些摘要可以成为正式项目记忆。
- evidence level 是否合理。
- 某个结果是否可以作为 claim。
- 中高风险内容是否可以让合作者看到,或是否可以对外公开。
Local Agent 的职责是降低学生的协作成本,而不是接管项目治理。
Agent 应该擅长:
- 记录 artifact。
- 根据本地事件生成 issue、comment 或 PR 草稿。
- 生成或更新
status.html草稿。 - 检查是否泄露敏感信息。
- 标注 evidence level、claim scope 和 risk level。
- 读取 GitHub 反馈,并转成本地任务或回复草稿。
Agent 不应该:
- 直接修改 main 分支。
- 自动合并 PR。
- 自动把结果标记为 validated。
- 自动发布 public claim。
- 单方面关闭重大 issue。
- 单方面改变研究方向。
方案应优先使用 GitHub 已有对象:
- Issue 用于提问、建议、任务和实验请求。
- PR 用于更新正式项目记忆。
- Label 用于分类和路由。
- Milestone 用于阶段目标。
- Branch protection 用于避免直接修改 main。
- GitHub Pages 可选用于展示
status.html。
GitHub Projects、Discussions、自动化看板等都可以后加,不应该成为 MVP 的前置条件。
科研项目中最危险的事情之一,是把初步观察写成稳定结论。
所以任何实验结论进入 GitHub 时,都应该同时带上:
- Artifact ID:它对应哪个本地事实。
- Evidence level:这个证据有多可靠。
- Claim scope:这个说法可以传播到什么范围。
Skill 负责教 agent 如何维护 Research Memory。
Skill 应说明:
- 什么时候应该同步到 GitHub。
- 什么时候只保留本地或草稿。
- 如何避免夸大科研结论。
- 如何使用 artifact ID、evidence level、claim scope 和 risk level。
- 中高风险内容必须先让学生确认。
- 不得自动合并 PR、关闭重大 issue 或发布 public claim。
Skill 不负责绕过确认执行真实操作。真实 GitHub 输出必须先生成草稿并得到用户确认。
GitHub 约定定义协作表面:
- issue 用于问题、建议、协作请求和低风险状态回复。
- PR 用于正式项目记忆、状态页、实验卡片和决策记录。
- PR review/comment 是 critique 和决策记录渠道。
status.html或status.md只是状态视图,不是 review 渠道。
文件模板提供稳定格式,避免 agent 临场发明结构。
模板位于 docs/templates/research-memory/,覆盖 GitHub issue、PR、status update 和 artifact record。
只有当某个步骤必须人类交互,并且 chat、GitHub issue、GitHub PR 都无法承载时,才考虑 extension UI。
MVP 不做:
- artifact 浏览器。
- status dashboard。
- feedback inbox。
- PR 草稿管理面板。
- 项目记忆看板。
这些功能会让主应用变重,而且 GitHub 与 agent chat 已经能承担大部分交互。
整个系统分三层。
┌──────────────────────────────┐
│ Local Workspace │
│ 完整事实:数据、代码、日志、轨迹 │
└───────────────┬──────────────┘
│
v
┌──────────────────────────────┐
│ Research Memory Skill │
│ confirmation、policy、template │
└───────────────┬──────────────┘
│
v
┌──────────────────────────────┐
│ GitHub Project Memory │
│ issue、PR、status.html、记录 │
└──────────────────────────────┘
Local Workspace 是科研生产现场。它可以在学生电脑、本地服务器或实验室集群上。
这一层保存完整事实,不直接暴露给 GitHub。
Research Memory Skill + templates 是中间层。
它维护行为约束和文件结构,帮助 agent 生成同步草稿、执行安全检查,并在学生确认后把合适内容同步到 GitHub。
它不拥有科研结论的最终解释权,只提供约定、模板和检查。
GitHub Project Memory 是合作者看到的协作界面。
它应该足够完整,让一个不看本地工作区的人也能理解项目状态;但又必须足够克制,不泄露重资产、敏感信息和未经确认的强结论。
MVP 仓库结构应该少而稳定。
research-project-hub/
├── README.md
├── status.html
├── docs/
│ ├── log/
│ ├── experiments/
│ └── decisions/
└── .github/
├── ISSUE_TEMPLATE/
└── PULL_REQUEST_TEMPLATE.md
README 是稳定入口,不需要频繁更新。
它回答:
- 这个项目是什么。
- 当前研究目标是什么。
- 合作者如何参与。
- 到哪里看当前状态。
README 应链接到 status.html。如果启用 GitHub Pages,则链接到渲染后的状态页;否则链接到仓库中的 HTML 文件和相关 PR。
status.html 是最重要的项目记忆页面。
它回答:
- 当前阶段是什么。
- 活跃假设是什么。
- 最近证据有什么变化。
- 正在进行或刚完成的实验是什么。
- 当前 blocker 是什么。
- 需要合作者帮助什么。
- 下一步需要做什么决定。
status.html 的规则:
- 由 agent 按模板生成草稿,且只能基于用户确认过的项目记忆更新。
- 默认静态 HTML。
- MVP 不需要 JavaScript。
- CSS 尽量少,可以内联。
- 输出要稳定,方便 PR diff。
- 不作为真实事实源,真实事实仍在本地 workspace 和
.agents/artifacts.yml。 - 所有实验或结论都必须链接 artifact ID。
记录周报或 milestone 总结。
它不追求完整复盘,只记录对合作者有帮助的压缩进展。
存放值得沉淀的实验卡片。
实验卡片不放完整日志,只放目标、方法摘要、结果摘要、局限性、evidence level 和 artifact ID。
存放重要且相对稳定的决策。
临时想法不要写成决策记录。只有当它影响后续方向、资源投入或解释项目状态时,才需要记录。
为了保持简单,以下内容不作为 MVP 的默认要求:
ROADMAP.md:早期可先用status.html或 GitHub milestone 表达路线。DECISIONS.md汇总页:决策变多后再自动生成。- GitHub Projects:issue 和 PR 多到难以浏览后再启用。
- GitHub Discussions:开放式讨论明显多于任务型 issue 后再启用。
这套方案只需要四个核心字段:artifact ID、evidence level、claim scope、risk level。
Artifact ID 用来连接 GitHub 摘要和本地事实。
示例:
- id: EXP-014
type: experiment
title: Unseen species generalization experiment
status: completed
evidence_level: preliminary
claim_scope: internal-summary
visibility: github-summary-only
local_ref: internal-only
linked_github_issue: 23
linked_github_pr: 41GitHub 可以写:
Artifact: EXP-014
但不应该写:
/mnt/lab/server/private/project/runs/exp014
Evidence level 描述结果本身有多可靠。
observation 观察到的现象
preliminary 初步证据
reproduced 已复现证据
validated 已充分验证结果
规则:
- Agent 可以提出 evidence level。
- 学生必须确认进入 GitHub 正式记忆的 evidence level。
validated默认需要学生或导师确认。- 摘要必须避免把初步结果写成最终结论。
推荐表达:
EXP-014 提供了初步证据,表明在当前实验设置下方法 A 可能优于 baseline。
Evidence level: preliminary
Artifact: EXP-014
Claim scope 描述这个说法可以传播到什么范围。
local-note 只用于本地内部笔记
internal-summary 可进入 GitHub 内部协作摘要
public-claim 可对外公开主张
规则:
public-claim必须由人类确认。public-claim不等于validated,但通常应该有强证据支持。- 未投稿核心创新、专利相关内容、合作方敏感内容,默认不得成为
public-claim。
Risk level 描述同步内容进入 GitHub 的风险。
low 周报、非敏感 blocker、issue 状态回复、文档格式修正
medium 实验摘要、evidence level 更新、小幅状态变化、失败路线总结
high 强科学结论、重大路线转向、未投稿核心创新、投稿/专利/隐私/安全风险
默认处理:
low:可以由 agent 生成草稿,学生快速确认。medium:默认走 PR,学生 review 后合并。high:agent 只能生成草稿和风险说明,必须由学生或导师确认。
只有当本地事件改变以下任一状态时,才考虑同步:
- 项目状态。
- 证据状态。
- 协作需求。
- 决策状态。
应该同步:
- 关键实验完成。
- 某个假设被支持、削弱或否定。
- milestone 状态变化。
- blocker 出现或解决。
- 研究方向被暂停或恢复。
- 重要决策发生。
- 需要合作者输入。
- 周报或 milestone 总结到期。
不应该同步:
- 临时 debug。
- 没有结论的单次失败训练。
- 小参数调整。
- 原始日志。
- agent scratchpad。
- 重复性执行细节。
问题、建议、协作请求 → GitHub issue
低风险状态回复 → issue comment
当前正式项目状态 → PR 修改 status.html
值得沉淀的实验 → PR 新增/修改 docs/experiments/
重要方向性决策 → PR 新增/修改 docs/decisions/
周报或 milestone 总结 → PR 新增/修改 docs/log/
学生本地工作
↓
Agent 按模板草拟 artifact/status/GitHub 更新
↓
学生确认是否同步
↓
低风险反馈:issue/comment
↓
低风险反馈:issue/comment
正式记忆更新:PR
↓
合作者 review 或评论
↓
Agent 读取反馈,转成本地任务或回复草稿
默认配置应该偏保守。
agent_can_create_issue: true
agent_can_comment_when_mentioned: true
agent_can_create_pr: true
agent_can_update_status_via_pr: true
agent_can_modify_main_directly: false
agent_can_merge_pr: false
agent_can_close_major_issue: false
agent_can_mark_validated: false
agent_can_publish_public_claim: false
auto_merge_pr: false
human_required_for_medium_or_high_risk: true
human_required_for_validated_claim: true
human_required_for_public_claim: true
main_branch_requires_pr: true解释:
- Agent 可以帮助创建协作入口,但不能替代学生决定正式状态。
- 正式项目记忆默认通过 PR 更新。
- main 分支应该使用 branch protection,避免绕过 review。
- 中高风险内容、public claim、validated 结论都需要人类确认。
GitHub 不只是输出层,也是输入层。
Agent 可在用户要求时读取 GitHub 上的协作反馈:
- 新 issue。
- 新 comment。
- 新 PR。
- review comment。
- mention。
- 带有指定 label 的事项。
推荐 label:
question
suggestion
experiment-request
bug
decision-needed
agent-draft
needs-student-review
risk-high
反馈分类:
suggestion
bug
question
decision-request
collaboration-request
review-comment
experiment-request
处理方式:
- 低风险问题生成回复草稿。
- 有价值建议转成本地任务。
- 实验请求关联 artifact ID。
- 方向性问题加
decision-needed。 - 高风险或敏感问题升级给学生。
MVP 结构应少而清晰。
docs/templates/research-memory/github-issue.md
docs/templates/research-memory/github-pr.md
docs/templates/research-memory/status-update.md
docs/templates/research-memory/artifact-record.md
- GitHub 输出必须包含 Artifact ID 和 Evidence level。
validated、public claim、中高风险结论必须得到用户明确确认。- issue/PR/comment/status 更新必须先生成草稿。
- 未确认信息只能留在本地草稿或说明为 observation。
merge_pr
close_major_issue
mark_validated
publish_public_claim
这些动作应该保留给人类。
第一阶段只做最小闭环:
.agents/artifacts.yml
→ Research Memory Skill + templates 生成 GitHub 草稿
→ 学生确认
→ issue/comment/PR
→ 合作者评论
→ agent 读取反馈
需要实现四个模块。
能力:
- 创建 artifact ID。
- 记录 artifact 元数据。
- 关联 GitHub issue、PR 或文档。
- 按 ID 查询 artifact。
能力:
- 根据本地事件生成 issue、comment 或 PR 草稿。
- 自动填入 artifact ID。
- 标注 evidence level、claim scope 和 risk level。
- 生成稳定、静态、可 diff 的
status.html。 - 提醒学生隐藏敏感细节。
能力:
- 读取 GitHub issue、comment、PR 和 mention。
- 创建 issue、comment 或 PR。
- 创建分支并提交项目记忆文件。
- 在 PR 描述中包含检查清单。
GitHub auth 优先复用现有能力,例如 gh CLI、环境变量或用户已配置的 GitHub MCP。不要为了 MVP 先做复杂 token UI。
能力:
- 不注册 GUI-managed runtime service。
- 不提供 Electron-as-Node 启动入口。
- 不提供 worker workspace。
- 让 SciForge Runtime、Codex 等 runtime 通过普通 Skill 和模板遵守同一套约定。
只有当 MVP 被实际使用后,再考虑增强。
可以后加:
- 自动 issue 分类。
- 周报草稿生成。
- 实验卡片生成。
- label-based feedback routing。
- GitHub Pages 发布辅助。
- 决策索引自动生成。
- 多 agent review。
- 更完整的本地 artifact registry。
不建议一开始就做:
- 完整项目管理平台。
- extension UI。
- 自动合并。
- 多 agent 治理层。
- 复杂权限状态机。
- 把所有本地轨迹同步到 GitHub。
以下模板只是实现时的参考。核心方案不依赖模板细节。
## Summary
这次更新改变了什么?
## Artifact IDs
- EXP-014
- RUN-021
## Evidence / Claim / Risk
- Evidence level: observation / preliminary / reproduced / validated
- Claim scope: local-note / internal-summary / public-claim
- Risk level: low / medium / high
## Hidden Details
哪些细节不应该同步到 GitHub?
## Checks
- [ ] 包含 artifact ID
- [ ] 没有暴露本地路径、密钥或服务器信息
- [ ] 没有暴露合作方敏感信息
- [ ] evidence level 合理
- [ ] claim 没有被夸大
- [ ] 不看本地上下文也能理解
- [ ] 中高风险内容已由学生或导师确认# EXP-014: 实验标题
## Goal
本实验想验证什么。
## Method Summary
简要方法描述,不包含重日志和私有路径。
## Result Summary
简洁结果摘要。
## Evidence / Claim
- Evidence level: preliminary
- Claim scope: internal-summary
## Limitations
- 局限性 1
- 局限性 2
## Artifact Reference
Artifact ID: EXP-014
完整细节:local artifact index
## Next Step
下一步行动。status.html 第一版只需要表达项目状态,不需要复杂交互。
Project title
Current phase
Active hypotheses
Recent evidence
Running / recent experiments
Blockers
Help wanted
Next decisions
Updated at
Artifact references
- GitHub Issues:用于计划、讨论和跟踪工作。
- GitHub Pull Requests:用于提议、review 和合并变更。
- GitHub Projects:当 issue 和 PR 数量增加后,用于 board、table 和 roadmap view。
- Branch protection:用于要求 PR review 和状态检查,避免直接修改 main。
- GitHub Pages:可选用于展示静态
status.html。
参考文档:
- https://docs.github.com/articles/about-issues
- https://docs.github.com/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
- https://docs.github.com/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects
- https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches
- https://docs.github.com/pages