关于 new-workspace
new-workspace 是面向研究项目的技能,用于在代码和论文仓库中创建 Git 分支或工作树。它强调先核对仓库范围与现有工作树,并遵循路径约定、记录用途和退出条件。
主要功能
- 01检查仓库范围和现有工作树
- 02为代码或论文创建分支与工作树
- 03遵循组件专属路径约定
- 04准备目录和本地工具配置
- 05记录工作树用途与退出条件
适用场景
- 01启动独立的代码实验或功能开发
- 02创建会议投稿或终稿论文工作区
- 03在项目控制根目录布局中设置工作树
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ a-green-hand-jack/ ml-research-skills --skill new-workspace安装后在 Claude Code 中输入/new-workspace确认已加载。
详细介绍
创建新的 Git 工作区
操作前 — 必须执行
- 检测当前范围:运行
git rev-parse --git-common-dir和--show-toplevel,确认当前操作的仓库。在项目控制根目录布局中,识别目标是根仓库、code/还是paper/。 - 阅读项目记忆(如果存在
memory/BRIEFING.md):memory/BRIEFING.md— 当前阶段和活动工作树memory/project-conventions.md— 本项目的工作树命名政策和路径约定
- 检查现有工作树:创建新工作树前运行
git worktree list,避免名称冲突或产生孤立工作树。
跳过第 2 步可能导致工作树路径错误,或使用与现有分支或工作树政策冲突的名称。
创建分支或 Git 工作树时,不要混淆项目级管理与组件仓库管理。
在以下情况下使用此技能:
- 代码、实验、基线、功能、调试或 rebuttal 实现分支
- NeurIPS、ICML、ICLR、CVPR、ACL 或 EMNLP 等会议的论文分支
- arXiv 论文发布
- 会议终稿版本
在完整的研究项目中,代码工作树应位于 <ProjectName>/code-worktrees/ 下,论文工作树应位于 <ProjectName>/paper-worktrees/ 下。
将此技能与以下技能配合使用:
safe-git-ops:处理非简单的 Git 状态、冲突或沙箱写入失败research-project-memory:记录工作树用途和退出条件remote-project-control:在 SSH/HPC 服务上使用代码工作树时run-experiment:新工作区创建后立即启动作业时submit-paper:论文工作树用于投稿、arXiv 发布或会议终稿时camera-ready-finalizer:论文工作树用于录用后的版本时
核心原则
- 为组件仓库创建工作树,而不是为整个项目根目录创建。
- 优先将代码工作树放在
<ProjectName>/code-worktrees/下,与代码仓库同级。 - 优先将论文工作树放在
<ProjectName>/paper-worktrees/下,与论文仓库同级。 - 除非用户明确要求这种布局,否则避免在
code/或paper/内嵌套工作树。 - 每个研究工作树都应记录用途、关联的论点/风险/实验以及退出条件。
- 论文工作树还应记录目标会议/版本、投稿模式、模板/样式差异、清理要求和源码可见性假设。
- 论文源码可见性与会议无关。论文工作树可以是
agent-private、author-visible、anonymous-submission、public-preprint、camera-ready-public或publisher-artifact。 experiments/存放可运行逻辑;稳定的结果摘要放在docs/results/,报告放在docs/reports/,运行指针放在docs/runs/。- 运行
uv sync后,代码工作树应有自己的.venv/。默认情况下,论文工作树不需要本地安装 TeX;Overleaf/GitHub 编译可以作为权威版本。
步骤 1 - 确定目标类型
询问用户:
- 工作区类型:
branch或worktree - 组件:
code或paper - 分支类型:
- 代码:
feature、exp、baseline、debug、rebuttal或自定义 - 论文:
venue、submission、arxiv、camera-ready、rebuttal、paper-fix或自定义
- 代码:
- 不带前缀的分支名称
- 目标仓库路径(如果不明显)
- 对于论文工作区:源码可见性级别、受众、同步目标和清理门槛
- 是否写入工作树记忆
如果在 <ProjectName>/ 内运行,实验、基线、调试和 rebuttal 实现工作优先使用 code/ 仓库。
如果是会议适配、arXiv 发布、会议终稿、源码清理、仅修改论文的 rebuttal,或投稿格式调整,优先使用 paper/ 仓库。
如果在 <ProjectName>/code/ 内运行,则推断:
code repo root: <ProjectName>/code/
project control root: <ProjectName>/
worktree root: <ProjectName>/code-worktrees/
如果在 <ProjectName>/paper/ 内运行,则推断:
paper repo root: <ProjectName>/paper/
project control root: <ProjectName>/
worktree root: <ProjectName>/paper-worktrees/
如果在独立代码仓库内运行,则使用以下备用工作树根目录:
<code-repo-parent>/worktrees/
如果在独立论文仓库内运行,则使用以下备用工作树根目录:
<paper-repo-parent>/paper-worktrees/
步骤 2 - 验证 Git 状态
在目标仓库中:
git -C <repo-root> rev-parse --show-toplevel
git -C <repo-root> status --short
git -C <repo-root> branch --show-current
git -C <repo-root> worktree list
如果存在未提交的更改,询问是要提交、暂存、仅使用分支继续,还是取消。
步骤 3 - 选择分支名称
使用:
<branch-type>/<branch-name>
示例:
exp/new-lossbaseline/fair-tuningdebug/nan-lossrebuttal/add-ablationfeature/data-loadervenue/neuripsvenue/icmlarxiv/v1camera-ready/neuripsprivate/draftoverleaf/main-clean
工作树目录名称应便于文件系统使用:
<branch-type>-<branch-name-with-slashes-replaced-by-hyphens>
步骤 4 - 创建分支
对于仅使用分支的工作:
git -C <repo-root> checkout -b <branch-type>/<branch-name>
然后,如果该分支有研究用途,请更新组件记忆。
步骤 5 - 创建工作树
确定工作树根目录:
对于代码:
- 如果
<repo-root>是<ProjectName>/code/,则使用<ProjectName>/code-worktrees/。 - 如果
<repo-root>/../code-worktrees/存在,则使用该目录。 - 如果项目记忆中声明了代码工作树根目录,则使用该目录。
- 否则使用
<repo-root>/../worktrees/。
对于论文:
- 如果
<repo-root>是<ProjectName>/paper/,则使用<ProjectName>/paper-worktrees/。 - 如果
<repo-root>/../paper-worktrees/存在,则使用该目录。 - 如果项目记忆中声明了论文工作树根目录,则使用该目录。
- 否则使用
<repo-root>/../paper-worktrees/。
创建工作树:
mkdir -p <worktree-root>
git -C <repo-root> worktree add <worktree-root>/<worktree-dir-name> -b <branch-type>/<branch-name>
如果分支已存在,询问是否要基于现有分支创建工作树:
git -C <repo-root> worktree add <worktree-root>/<worktree-dir-name> <branch-type>/<branch-name>
步骤 6 - 复制本地工具配置并链接共享资源
如果存在本地 IDE/工具配置目录,请复制:
.vscode/
.cursor/
.claude/
请复制而不是创建符号链接,因为每个工作树可能需要独立的 IDE 状态。
如果 <repo-root>/.worktree-links 存在,请读取其中的相对路径,并将共享的大型资源符号链接到工作树中。典型条目:
data/
models/
.env
configs/local_settings.yaml
使用绝对符号链接目标,确保链接在工作树路径下仍然有效。
步骤 7 - 准备组件专用路径
代码工作树
在工作树中,确保:
docs/results/
docs/reports/
docs/runs/
.agent/
使用以下路径存放分支专属证据:
docs/results/:稳定的结果摘要、表格备注、图表备注docs/reports/:实验报告和结果说明docs/runs/:作业 ID、配置路径、提交哈希、远程路径、简要指标.agent/worktree-status.md:用途、关联的主张/风险、最新可靠状态、退出条件
不要在 docs/ 中存放原始日志、检查点、wandb 运行数据、tensorboard 缓存或大型输出。
论文 Worktree
在论文 worktree 中,确保:
.agent/
创建或更新 .agent/worktree-status.md,填写论文版本相关字段:
- 目标会议或发布版本:NeurIPS、ICML、ICLR、CVPR、ACL、EMNLP、arXiv、camera-ready
- 投稿模式:anonymous、preprint、camera-ready、rebuttal 或 internal
- 与主论文在样式/模板上的差异
- 源文件可见性层级:
agent-private:可包含.agent/、AGENTS.md、CLAUDE.md、写作记忆、来源记录、内部结果文档、CSV 和绘图脚本;不应同步到 Overleaf/公共远程仓库author-visible:合作者/Overleaf 可见;必须排除.agent/、AGENTS.md、CLAUDE.md、原始 CSV、内部文档、绘图脚本、审稿人策略和私有路径anonymous-submission:会议/源文件上传可见;必须确保匿名,并排除 Agent/私有文件public-preprint:arXiv/公开源文件;必须清理为可公开状态camera-ready-public:最终录用后的公开/出版方源文件;必须取消匿名并清理为可公开状态publisher-artifact:仅包含最终公开源文件及面向产物/发布的文件
- 受众和同步目标:none、Overleaf-GitHub、GitHub、submission-system、arXiv、publisher 或 artifact
- 允许的路径和禁止的路径
- 清理检查点:before-push、before-submission、before-arxiv、before-camera-ready 或 before-release
- 清理要求:
- arXiv/公开源文件:删除 TODO、作者评论、审稿人备注、TeX 注释中的内部图表说明、隐藏备注和匿名化残留
- 作者可见/Overleaf:删除或避免包含
.agent/、AGENTS.md、CLAUDE.md、原始 CSV、内部结果文档、绘图脚本、私有路径和仅供 Agent 使用的备注 - 会议匿名稿:确保匿名并符合会议格式;若源文件会被上传,源代码注释仍可能带来风险,因此不要依赖注释来保护隐私
- camera-ready:取消匿名、添加致谢/经费信息、落实 rebuttal 中的承诺,并删除仅供草稿使用的备注
- 源文件格式检查:安装了
tex-fmt时运行tex-fmt --check --nowrap --recursive .;仅在用户要求或项目政策规定时,才使用tex-fmt --nowrap --recursive .格式化 - 如果使用了 Overleaf/GitHub,记录其编译状态和分支映射
除非用户明确要求在论文 worktree 中记录论文专属备注,否则不要将代码侧的 docs/results/、docs/reports/ 或 docs/runs/ 约定复制到论文 worktree 中。论文版本记忆优先放在 .agent/ 中,持久的跨版本状态则放在根目录的 memory/ 中。
步骤 8 - 同步环境
对于代码 worktree,如果其中存在 pyproject.toml:
cd <worktree-path>
uv sync
如果 uv sync 失败,请报告错误,但不要删除 worktree。用户可能仍想检查或修复该分支。
对于论文 worktree,默认不要安装 TeX。使用项目的编译工作流:本地静态检查、可用时使用 tex-fmt,以及与 GitHub 关联的 Overleaf;除非用户明确要求使用本地 TeX。
第 9 步——编写 Worktree 记忆
如果工作区用于研究,请创建或更新:
<worktree>/.agent/worktree-status.md
包括:
- 分支
- 路径
- 创建日期
- 父分支
- 用途
- 关联的主张、实验、风险或审阅者提出的问题
- 与 main 分支的预期差异
- 对于论文 worktree:目标投稿场合/版本、模板/样式差异、源文件清理策略,以及公开/私有源文件假设
- 对于论文 worktree:源文件可见性级别、受众、同步目标、允许/禁止的文件策略,以及清理关卡
- 结果/输出路径
- 退出条件:合并、继续、搁置或终止
- 下一步验证操作
如果存在项目记忆,还要添加简短指引,指向:
memory/component-index.yaml:已知 worktree 路径<component>/.agent/worktree-index.md:组件本地的活动 worktree 汇总memory/source-visibility-board.md:论文 worktree 或可见分支的源文件可见性级别和清理关卡memory/action-board.md:该 worktree 的下一步操作memory/current-status.md:仅当这是当前重点时memory/project-conventions.md:如果此 worktree 引入了新的命名约定、分支策略或 worktree 范围规则,且后续 Agent 必须了解,则将其添加到worktree类别下
根目录注册表和组件 worktree 索引是跨 worktree 的记忆记录位置。不要依赖某个 worktree 的叶级状态文件来告知后续 Agent 还存在其他哪些同级分支或论文版本。
第 10 步——最终摘要
报告:
Workspace created
Repo: <repo-root>
Branch: <branch-type>/<branch-name>
Worktree: <path or branch-only>
Evidence paths:
<code worktree only: docs/results/, docs/reports/, docs/runs/>
Memory:
.agent/worktree-status.md <created|skipped>
Next:
cd <worktree-path>
<code: uv sync and run/edit the planned experiment>
<paper: run submit-paper checks and sync to Overleaf/GitHub if needed>
错误处理
- 不是 Git 仓库:停止并询问目标仓库。
- 工作树有未提交的更改:询问是提交、暂存、继续还是取消。
- 分支已存在:询问是使用现有分支还是选择新名称。
- Worktree 路径已存在:询问是选择新名称还是检查现有路径。
- 沙盒阻止写入 Git 元数据:视为权限问题,并使用
safe-git-ops。 - UV 同步失败:保留 worktree 并报告环境问题。
- 本地无法编译论文:默认不安装 TeX;改用 Overleaf/GitHub。
配置文件模板
如果 .worktree-links 不存在,请提出创建:
# .worktree-links
#
# Symlinks to create in new worktrees.
# List paths relative to the code repo root.
# data/
# models/
# .env
# configs/local_settings.yaml
最终健全性检查
- 分支或 worktree 已在预期的组件仓库中创建
- 除非有明确请求,否则 worktree 不嵌套在
code/或paper/内 git worktree list显示预期路径- 代码 worktree 的代码证据路径存在
- 论文 worktree 已记录版本策略
- 论文 worktree 已记录论文源文件可见性策略,尤其是对 Overleaf/合著者可见的分支和公开源文件分支
- 在相关情况下,worktree 记忆记录了用途和退出条件
- 项目记忆仅更新持久有效的指引,不记录日志