资讯动态

如何用 oh-my-claudecode 的 PSM 为 Issue 或 PR 创建隔离的 git worktree + tmux 开发会话?

发布时间:2026/9/10 5:49:54 来源:尧图企业网站定制
如何用 oh-my-claudecode 的 PSM 为 Issue 或 PR 创建隔离的 git worktree tmux 开发会话【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecodePSMProject Session Manager项目会话管理器是 oh-my-claudecode 内置的一个 skill它为每个 Issue 或 PR 自动创建一个独立的 git worktree 目录在其中开一个 tmux 会话并在会话里启动 Claude Code、把任务上下文作为初始提示词喂给它。这样你可以同时在多个任务之间切换而不必 stash 或来回切分支评审 PR 也不会弄脏主工作目录。PSM 有两种调用方式在 Claude Code 里用斜杠命令/oh-my-claudecode:project-session-manager别名/oh-my-claudecode:psm或直接运行仓库自带的脚本 psm.sh下文写作psm。准备条件安装依赖并了解首次运行行为根据 SKILL.md 的 Requirements 一节依赖如下依赖要求用途gitv2.5带 worktree 支持必需创建隔离 worktreejq任意必需解析 JSON 配置与返回信息tmux任意可选但推荐缺失时 PSM 会警告并跳过 tmux 会话创建ghGitHub 工作流需要获取 PR/Issue 信息jira仅 Jira 工作流需要获取 Jira 任务信息脚本在每次运行时先做依赖检查见psm.sh的check_dependencies缺少git或jq会直接报错退出并给出安装提示Ubuntu/Debian: sudo apt install git jq或macOS: brew install git jq。首次运行时 PSM 会自动初始化~/.psm/目录结构包括worktrees/、logs/以及在不存在时生成默认的projects.json和sessions.jsonpsm_init见 config.sh。生成的默认配置包含一个指向本仓库的omc别名你可以在 templates/projects.json 中看到它的模板形态{ aliases: { omc: { repo: Yeachan-Heo/oh-my-claudecode, local: ~/Workspace/oh-my-claudecode, default_base: main } }, defaults: { worktree_root: ~/.psm/worktrees, cleanup_after_days: 14, auto_cleanup_merged: true } }目录布局为~/.psm/ ├── projects.json # 项目别名 ├── sessions.json # 活跃会话注册表 └── worktrees/ # worktree 存储 └── project/ └── type-id/如果你要管理的项目不是 oh-my-claudecode 本身需要编辑~/.psm/projects.json为该项目加一个别名条目repo填owner/repolocal填本机上已有的仓库克隆路径default_base填会话分支的基线分支如main或develop。local路径不存在时review/fix流程会尝试克隆到~/Workspace/仓库名。项目引用格式如何指定要操作的 Issue 或 PR创建会话时需要一个引用refPSM 支持四种格式SKILL.md 的 Project References 一节别名omc#123要求~/.psm/projects.json中配置了对应别名完整引用owner/repo#123GitHub URLhttps://github.com/owner/repo/pull/123当前仓库#123使用当前目录所在仓库创建 PR 评审会话review在 Claude Code 中输入/psm review omc#123或直接执行脚本psm review omc#123review的完整流程cmd_review见 psm.sh解析引用取出仓库、PR 号和本地路径通过gh获取 PR 的标题、作者、head/base 分支名、URL 和正文在本地仓库执行git fetch origin pull/pr_number/head并创建 worktree路径为~/.psm/worktrees/alias/pr-pr_number把 PR 评审上下文渲染到 worktree 的.psm/review.md模板见 templates/pr-review.md创建 tmux 会话并在其中启动claude --dangerously-skip-permissions。文档中说明该参数用于避免 Do you trust this directory? 提示和反复的工具授权提示卡住会话issue #2508等待PSM_CLAUDE_STARTUP_DELAY默认 5 秒后用tmux send-keys -l把评审任务提示词送入会话。成功后输出类似下面的会话信息文档示例Session ready! ID: omc:pr-123 Type: review PR: #123 - Add webhook support Worktree: ~/.psm/worktrees/omc/pr-123 Tmux: psm_omc_pr-123 Commands: Attach: tmux attach -t psm_omc_pr-123 Kill: psm kill omc:pr-123 Cleanup: psm cleanup如果 worktree 已存在PSM 不会重建而是提示Worktree already exists at ...并建议你用psm attach alias:pr-number接入。创建 Issue 修复会话fix/psm fix omc#42psm fix omc#42fix与review的区别在于它通过gh获取 Issue 详情后从基线分支新建一个fix/issue-slug分支再在~/.psm/worktrees/alias/issue-issue_number上创建 worktree并把 Issue 标题、描述、标签渲染到 worktree 的.psm/fix.md作为 Claude 的初始上下文。feature子命令用于无 Issue 关联的功能开发/psm feature omc add-webhooks它会创建feature/add-webhooks分支和feat-add-webhooksworktree。注意 Jira 提供方不支持reviewJira 没有 PR 概念Jira 任务用fix处理。会话命名公共 ID 与 tmux 会话名的对应关系由于 tmux 把:和.保留给自身的session:window.pane目标语法并会静默改写它们PSM 在两个地方使用不同形式的名称SKILL.md 的 Session Naming 一节issue #3528类型公共 IDpsm attach/kill使用tmux 会话名tmux attach -t使用worktree 目录PR 评审omc:pr-123psm_omc_pr-123~/.psm/worktrees/omc/pr-123Issue 修复omc:issue-42psm_omc_issue-42~/.psm/worktrees/omc/issue-42功能开发omc:feat-authpsm_omc_feat-auth~/.psm/worktrees/omc/feat-auth规则是公共 ID 中的:/.在 tmux 会话名中变为_。用psm命令时始终填公共 ID手工执行tmux命令时填 tmux 会话名。注意 docs/design/project-session-manager.md 是设计草案标注 Status: Design Draft其中psm:omc:pr-123的冒号形式与最终实现不一致实际以 SKILL.md 和脚本中的下划线形式为准。验证会话已就绪创建完成后按以下方式核对看创建输出review会打印Session ready!及 ID、Worktree、Tmux 三项如上示例列出注册表psm list输出Active PSM Sessions:表格列包括 ID、Type、State、WorktreeState 一列会区分 tmux 会话是否存在不存在显示no-tmux。也可以按项目过滤psm list omc。Active PSM Sessions: ID | Type | State | Worktree -------------------|---------|----------|--------------------------- omc:pr-123 | review | active | ~/.psm/worktrees/omc/pr-123 omc:issue-42 | fix | detached | ~/.psm/worktrees/omc/issue-42表格为文档示例输出确认 tmux 会话存在tmux list-sessions -F #{session_name} 2/dev/null | grep ^psm_接入会话tmux attach -t psm_omc_pr-123或psm attach omc:pr-123——它会先校验对应 tmux 会话存在然后打印Run: tmux attach -t psm_omc_pr-123。在 tmux 内用 Ctrl-b d 可随时脱离之后随时重新 attach。在 worktree 目录内还可以用psm status查看当前会话的 Type、Branch、Base、Worktree 和创建时间不在任何 PSM 会话中时会提示Not in a PSM session。常见问题与边界现象文档给出的处理Worktree 已存在提示 attach、重建或放弃psm attach id接入已有 worktreePR not found核对 URL/编号检查gh的访问权限未安装 tmux警告并跳过 tmux 会话创建其余步骤继续未安装gh报错并给出安装说明如brew install ghJira 引用PROJ-123只有在该PROJ被配置为某个别名的jira_project时才按 Jira 识别避免与分支名如FIX-123误匹配结束会话与清理kill会同时终止 tmux 会话、强制移除 worktreegit worktree remove --force并更新注册表——未推送的改动会随 worktree 一起删除执行前确认工作已推送psm kill omc:pr-123PR 合并或 Issue 关闭后用psm cleanup批量清理它逐个查询 PR 是否 merged、Issue 是否 closed只移除已完成的会话并报告Cleanup complete - removed N session(s)。可选分支只要 worktree、不要 tmux如果只需要隔离目录而不需要 tmux 会话和 Claude 自动启动可以用omc teleport代替完整 PSM 会话SKILL.md 的 Teleport Command 一节omc teleport #123 # 为当前仓库的 issue/PR 创建 worktree omc teleport my-feature # 为功能创建 worktree omc teleport list # 列出 worktree omc teleport remove issue/my-repo-123teleport 的 worktree 默认放在~/Workspace/omc-worktrees/下可用--path path覆盖目录按issue/、pr/、feat/分类。与 PSM 的差异teleport 不创建 tmux 会话、不启动 Claude Code、不维护会话注册表、没有自动清理也不使用项目别名使用当前仓库。需要完整的受管会话时用 PSM只需要快速隔离目录时用 teleport。【免费下载链接】oh-my-claudecodeTeams-first Multi-agent orchestration for Claude Code项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-claudecode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价