project-session-manager by yeachan-heo/oh-my-claudecode
npx skills add https://github.com/yeachan-heo/oh-my-claudecode --skill project-session-managerpsm 是此规范技能入口点的兼容别名。
快速开始: 对于无需 tmux 会话的简单工作树创建,请使用
omc teleport:omc teleport #123 # 为 issue/PR 创建工作树 omc teleport my-feature # 为功能创建工作树 omc teleport list # 列出工作树详情请参阅下方的 Teleport 命令。
使用 git worktrees 和 tmux 会话与 Claude Code 自动化隔离的开发环境。支持跨多个任务、项目和仓库的并行工作。
规范斜杠命令:/oh-my-claudecode:project-session-manager (别名:/oh-my-claudecode:psm)。
| 命令 | 描述 | 示例 |
|---|
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
review <ref> | PR 审查会话 | /psm review omc#123 |
fix <ref> | Issue 修复会话 | /psm fix omc#42 |
feature <proj> <name> | 功能开发 | /psm feature omc add-webhooks |
list [project] | 列出活动会话 | /psm list |
attach <session> | 附加到会话 | /psm attach omc:pr-123 |
kill <session> | 终止会话 | /psm kill omc:pr-123 |
cleanup | 清理已合并/已关闭的会话 | /psm cleanup |
status | 当前会话信息 | /psm status |
支持的格式:
omc#123 (需要 ~/.psm/projects.json)owner/repo#123https://github.com/owner/repo/pull/123#123 (使用当前目录的仓库)~/.psm/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
}
}
PSM 支持多个问题跟踪提供商:
| 提供商 | 所需 CLI | 引用格式 | 命令 |
|---|---|---|---|
| GitHub (默认) | gh | owner/repo#123, alias#123, GitHub URLs | review, fix, feature |
| Jira | jira | PROJ-123 (如果 PROJ 已配置), alias#123 | fix, feature |
要使用 Jira,请添加带有 jira_project 和 provider: "jira" 的别名:
{
"aliases": {
"mywork": {
"jira_project": "MYPROJ",
"repo": "mycompany/my-project",
"local": "~/Workspace/my-project",
"default_base": "develop",
"provider": "jira"
}
}
}
重要: repo 字段对于克隆 git 仓库仍然是必需的。Jira 跟踪问题,但您在 git 仓库中工作。
对于非 GitHub 仓库,请使用 clone_url 替代:
{
"aliases": {
"private": {
"jira_project": "PRIV",
"clone_url": "git@gitlab.internal:team/repo.git",
"local": "~/Workspace/repo",
"provider": "jira"
}
}
}
只有当 PROJ 在您的别名中明确配置为 jira_project 时,PSM 才会将 PROJ-123 格式识别为 Jira。这可以防止像 FIX-123 这样的分支名称产生误报。
# 修复一个 Jira issue (MYPROJ 必须已配置)
psm fix MYPROJ-123
# 使用别名修复 (推荐)
psm fix mywork#123
# 功能开发 (与 GitHub 工作方式相同)
psm feature mywork add-webhooks
# 注意:'psm review' 不支持 Jira (无 PR 概念)
# 对于 Jira issues,请使用 'psm fix'
安装 Jira CLI:
# macOS
brew install ankitpokhrel/jira-cli/jira-cli
# Linux
# 参见:https://github.com/ankitpokhrel/jira-cli#installation
# 配置 (交互式)
jira init
Jira CLI 独立于 PSM 处理身份验证。
~/.psm/
├── projects.json # 项目别名
├── sessions.json # 活动会话注册表
└── worktrees/ # 工作树存储
└── <project>/
└── <type>-<id>/
| 类型 | Tmux 会话 | 工作树目录 |
|---|---|---|
| PR 审查 | psm:omc:pr-123 | ~/.psm/worktrees/omc/pr-123 |
| Issue 修复 | psm:omc:issue-42 | ~/.psm/worktrees/omc/issue-42 |
| 功能 | psm:omc:feat-auth | ~/.psm/worktrees/omc/feat-auth |
当用户调用 PSM 命令时,请遵循此协议:
解析 {{ARGUMENTS}} 以确定:
review <ref>目的 : 创建 PR 审查会话
步骤 :
解析引用 :
# 读取项目别名
cat ~/.psm/projects.json 2>/dev/null || echo '{"aliases":{}}'
# 解析引用格式:alias#num, owner/repo#num, 或 URL
# 提取:project_alias, repo (owner/repo), pr_number, local_path
获取 PR 信息 :
gh pr view <pr_number> --repo <repo> --json number,title,author,headRefName,baseRefName,body,files,url
确保本地仓库存在 :
# 如果本地路径不存在,则克隆
if [[ ! -d "$local_path" ]]; then
git clone "https://github.com/$repo.git" "$local_path"
fi
创建工作树 :
worktree_path="$HOME/.psm/worktrees/$project_alias/pr-$pr_number"
# 获取 PR 分支
cd "$local_path"
git fetch origin "pull/$pr_number/head:pr-$pr_number-review"
# 创建工作树
git worktree add "$worktree_path" "pr-$pr_number-review"
创建会话元数据 :
cat > "$worktree_path/.psm-session.json" << EOF
{
"id": "$project_alias:pr-$pr_number",
"type": "review",
"project": "$project_alias",
"ref": "pr-$pr_number",
"branch": "<head_branch>",
"base": "<base_branch>",
"created_at": "$(date -Iseconds)",
"tmux_session": "psm:$project_alias:pr-$pr_number",
"worktree_path": "$worktree_path",
"source_repo": "$local_path",
"github": {
"pr_number": $pr_number,
"pr_title": "<title>",
"pr_author": "<author>",
"pr_url": "<url>"
},
"state": "active"
}
EOF
更新会话注册表 :
# 添加到 ~/.psm/sessions.json
创建 tmux 会话 :
tmux new-session -d -s "psm:$project_alias:pr-$pr_number" -c "$worktree_path"
启动 Claude Code (除非指定 --no-claude):
tmux send-keys -t "psm:$project_alias:pr-$pr_number" "claude" Enter
输出会话信息 :
Session ready!
ID: omc:pr-123
Worktree: ~/.psm/worktrees/omc/pr-123
Tmux: psm:omc:pr-123
To attach: tmux attach -t psm:omc:pr-123
fix <ref>目的 : 创建 issue 修复会话
步骤 :
解析引用 (与 review 相同)
获取 issue 信息 :
gh issue view <issue_number> --repo <repo> --json number,title,body,labels,url
创建功能分支 :
cd "$local_path"
git fetch origin main
branch_name="fix/$issue_number-$(echo "$title" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | head -c 30)"
git checkout -b "$branch_name" origin/main
创建工作树 :
worktree_path="$HOME/.psm/worktrees/$project_alias/issue-$issue_number"
git worktree add "$worktree_path" "$branch_name"
创建会话元数据 (与 review 类似,type="fix")
更新注册表,创建 tmux,启动 claude (与 review 相同)
feature <project> <name>目的 : 开始功能开发
步骤 :
解析项目 (从别名或路径)
创建功能分支 :
cd "$local_path"
git fetch origin main
branch_name="feature/$feature_name"
git checkout -b "$branch_name" origin/main
创建工作树 :
worktree_path="$HOME/.psm/worktrees/$project_alias/feat-$feature_name"
git worktree add "$worktree_path" "$branch_name"
创建会话,tmux,启动 claude (相同模式)
list [project]目的 : 列出活动会话
步骤 :
读取会话注册表 :
cat ~/.psm/sessions.json 2>/dev/null || echo '{"sessions":{}}'
检查 tmux 会话 :
tmux list-sessions -F "#{session_name}" 2>/dev/null | grep "^psm:"
检查工作树 :
ls -la ~/.psm/worktrees/*/ 2>/dev/null
格式化输出 :
Active PSM Sessions:
ID | Type | Status | Worktree
-------------------|---------|----------|---------------------------
omc:pr-123 | review | active | ~/.psm/worktrees/omc/pr-123
omc:issue-42 | fix | detached | ~/.psm/worktrees/omc/issue-42
attach <session>目的 : 附加到现有会话
步骤 :
解析会话 ID : project:type-number
验证会话存在 :
tmux has-session -t "psm:$session_id" 2>/dev/null
附加 :
tmux attach -t "psm:$session_id"
kill <session>目的 : 终止会话并清理
步骤 :
终止 tmux 会话 :
tmux kill-session -t "psm:$session_id" 2>/dev/null
移除工作树 :
worktree_path=$(jq -r ".sessions[\"$session_id\"].worktree" ~/.psm/sessions.json)
source_repo=$(jq -r ".sessions[\"$session_id\"].source_repo" ~/.psm/sessions.json)
cd "$source_repo"
git worktree remove "$worktree_path" --force
更新注册表 :
# 从 sessions.json 中移除
cleanup目的 : 清理已合并的 PR 和已关闭的 issues
步骤 :
读取所有会话
对于每个 PR 会话,检查是否已合并 :
gh pr view <pr_number> --repo <repo> --json merged,state
对于每个 issue 会话,检查是否已关闭 :
gh issue view <issue_number> --repo <repo> --json closed,state
清理已合并/已关闭的会话 :
报告 :
Cleanup complete:
Removed: omc:pr-123 (merged)
Removed: omc:issue-42 (closed)
Kept: omc:feat-auth (active)
status目的 : 显示当前会话信息
步骤 :
从 tmux 或 cwd 检测当前会话 :
tmux display-message -p "#{session_name}" 2>/dev/null
# 或检查 cwd 是否在工作树内
读取会话元数据 :
cat .psm-session.json 2>/dev/null
显示状态 :
Current Session: omc:pr-123
Type: review
PR: #123 - Add webhook support
Branch: feature/webhooks
Created: 2 hours ago
| 错误 | 解决方案 |
|---|---|
| 工作树已存在 | 提供选项:附加、重新创建或中止 |
| 未找到 PR | 验证 URL/编号,检查权限 |
| 无 tmux | 警告并跳过会话创建 |
| 无 gh CLI | 错误并附带安装说明 |
omc teleport 命令提供了完整 PSM 会话的轻量级替代方案。它创建 git 工作树,无需 tmux 会话管理 —— 非常适合快速、隔离的开发。
# 为 issue 或 PR 创建工作树
omc teleport #123
omc teleport owner/repo#123
omc teleport https://github.com/owner/repo/issues/42
# 为功能创建工作树
omc teleport my-feature
# 列出现有工作树
omc teleport list
# 移除工作树
omc teleport remove issue/my-repo-123
omc teleport remove --force feat/my-repo-my-feature
| 标志 | 描述 | 默认值 |
|---|---|---|
--worktree | 创建工作树 (默认,为兼容性保留) | true |
--path <path> | 自定义工作树根目录 | ~/Workspace/omc-worktrees/ |
--base <branch> | 创建分支的基准分支 | main |
--json | 以 JSON 格式输出 | false |
~/Workspace/omc-worktrees/
├── issue/
│ └── my-repo-123/ # Issue 工作树
├── pr/
│ └── my-repo-456/ # PR 审查工作树
└── feat/
└── my-repo-my-feature/ # 功能工作树
| 功能 | PSM | Teleport |
|---|---|---|
| Git 工作树 | 是 | 是 |
| Tmux 会话 | 是 | 否 |
| Claude Code 启动 | 是 | 否 |
| 会话注册表 | 是 | 否 |
| 自动清理 | 是 | 否 |
| 项目别名 | 是 | 否 (使用当前仓库) |
使用 PSM 进行完整的管理会话。使用 teleport 进行快速工作树创建。
必需:
git - 版本控制 (支持 worktree v2.5+)jq - JSON 解析tmux - 会话管理 (可选,但推荐)可选 (按提供商):
gh - GitHub CLI (用于 GitHub 工作流)jira - Jira CLI (用于 Jira 工作流)首次运行时,创建默认配置:
mkdir -p ~/.psm/worktrees ~/.psm/logs
# 如果不存在则创建默认的 projects.json
if [[ ! -f ~/.psm/projects.json ]]; then
cat > ~/.psm/projects.json << 'EOF'
{
"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
}
}
EOF
fi
# 如果不存在则创建 sessions.json
if [[ ! -f ~/.psm/sessions.json ]]; then
echo '{"version":1,"sessions":{},"stats":{"total_created":0,"total_cleaned":0}}' > ~/.psm/sessions.json
fi
每周安装量
135
仓库
GitHub 星标数
11.2K
首次出现
2026年1月28日
安全审计
安装于
claude-code125
opencode123
cursor119
gemini-cli118
codex117
github-copilot109
psm is the compatibility alias for this canonical skill entrypoint.
Quick Start: For simple worktree creation without tmux sessions, use
omc teleport:omc teleport #123 # Create worktree for issue/PR omc teleport my-feature # Create worktree for feature omc teleport list # List worktreesSee Teleport Command below for details.
Automate isolated development environments using git worktrees and tmux sessions with Claude Code. Enables parallel work across multiple tasks, projects, and repositories.
Canonical slash command: /oh-my-claudecode:project-session-manager (alias: /oh-my-claudecode:psm).
| Command | Description | Example |
|---|---|---|
review <ref> | PR review session | /psm review omc#123 |
fix <ref> | Issue fix session | /psm fix omc#42 |
feature <proj> <name> | Feature development | /psm feature omc add-webhooks |
list [project] | List active sessions | /psm list |
Supported formats:
omc#123 (requires ~/.psm/projects.json)owner/repo#123https://github.com/owner/repo/pull/123#123 (uses current directory's repo)~/.psm/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
}
}
PSM supports multiple issue tracking providers:
| Provider | CLI Required | Reference Formats | Commands |
|---|---|---|---|
| GitHub (default) | gh | owner/repo#123, alias#123, GitHub URLs | review, fix, feature |
| Jira | jira | PROJ-123 (if PROJ configured), alias#123 | fix, feature |
To use Jira, add an alias with jira_project and provider: "jira":
{
"aliases": {
"mywork": {
"jira_project": "MYPROJ",
"repo": "mycompany/my-project",
"local": "~/Workspace/my-project",
"default_base": "develop",
"provider": "jira"
}
}
}
Important: The repo field is still required for cloning the git repository. Jira tracks issues, but you work in a git repo.
For non-GitHub repos, use clone_url instead:
{
"aliases": {
"private": {
"jira_project": "PRIV",
"clone_url": "git@gitlab.internal:team/repo.git",
"local": "~/Workspace/repo",
"provider": "jira"
}
}
}
PSM only recognizes PROJ-123 format as Jira when PROJ is explicitly configured as a jira_project in your aliases. This prevents false positives from branch names like FIX-123.
# Fix a Jira issue (MYPROJ must be configured)
psm fix MYPROJ-123
# Fix using alias (recommended)
psm fix mywork#123
# Feature development (works same as GitHub)
psm feature mywork add-webhooks
# Note: 'psm review' is not supported for Jira (no PR concept)
# Use 'psm fix' for Jira issues
Install the Jira CLI:
# macOS
brew install ankitpokhrel/jira-cli/jira-cli
# Linux
# See: https://github.com/ankitpokhrel/jira-cli#installation
# Configure (interactive)
jira init
The Jira CLI handles authentication separately from PSM.
~/.psm/
├── projects.json # Project aliases
├── sessions.json # Active session registry
└── worktrees/ # Worktree storage
└── <project>/
└── <type>-<id>/
| Type | Tmux Session | Worktree Dir |
|---|---|---|
| PR Review | psm:omc:pr-123 | ~/.psm/worktrees/omc/pr-123 |
| Issue Fix | psm:omc:issue-42 | ~/.psm/worktrees/omc/issue-42 |
| Feature | psm:omc:feat-auth | ~/.psm/worktrees/omc/feat-auth |
When the user invokes a PSM command, follow this protocol:
Parse {{ARGUMENTS}} to determine:
review <ref>Purpose : Create PR review session
Steps :
Resolve reference :
# Read project aliases
cat ~/.psm/projects.json 2>/dev/null || echo '{"aliases":{}}'
# Parse ref format: alias#num, owner/repo#num, or URL
# Extract: project_alias, repo (owner/repo), pr_number, local_path
Fetch PR info :
gh pr view <pr_number> --repo <repo> --json number,title,author,headRefName,baseRefName,body,files,url
Ensure local repo exists :
# If local path doesn't exist, clone
if [[ ! -d "$local_path" ]]; then
git clone "https://github.com/$repo.git" "$local_path"
fi
Create worktree :
worktree_path="$HOME/.psm/worktrees/$project_alias/pr-$pr_number"
# Fetch PR branch
cd "$local_path"
git fetch origin "pull/$pr_number/head:pr-$pr_number-review"
# Create worktree
git worktree add "$worktree_path" "pr-$pr_number-review"
fix <ref>Purpose : Create issue fix session
Steps :
Resolve reference (same as review)
Fetch issue info :
gh issue view <issue_number> --repo <repo> --json number,title,body,labels,url
Create feature branch :
cd "$local_path"
git fetch origin main
branch_name="fix/$issue_number-$(echo "$title" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | head -c 30)"
git checkout -b "$branch_name" origin/main
Create worktree :
worktree_path="$HOME/.psm/worktrees/$project_alias/issue-$issue_number"
git worktree add "$worktree_path" "$branch_name"
Create session metadata (similar to review, type="fix")
Update registry, create tmux, launch claude (same as review)
feature <project> <name>Purpose : Start feature development
Steps :
Resolve project (from alias or path)
Create feature branch :
cd "$local_path"
git fetch origin main
branch_name="feature/$feature_name"
git checkout -b "$branch_name" origin/main
Create worktree :
worktree_path="$HOME/.psm/worktrees/$project_alias/feat-$feature_name"
git worktree add "$worktree_path" "$branch_name"
Create session, tmux, launch claude (same pattern)
list [project]Purpose : List active sessions
Steps :
Read sessions registry :
cat ~/.psm/sessions.json 2>/dev/null || echo '{"sessions":{}}'
Check tmux sessions :
tmux list-sessions -F "#{session_name}" 2>/dev/null | grep "^psm:"
Check worktrees :
ls -la ~/.psm/worktrees/*/ 2>/dev/null
Format output :
Active PSM Sessions:
ID | Type | Status | Worktree
-------------------|---------|----------|---------------------------
omc:pr-123 | review | active | ~/.psm/worktrees/omc/pr-123
omc:issue-42 | fix | detached | ~/.psm/worktrees/omc/issue-42
attach <session>Purpose : Attach to existing session
Steps :
Parse session ID : project:type-number
Verify session exists :
tmux has-session -t "psm:$session_id" 2>/dev/null
Attach :
tmux attach -t "psm:$session_id"
kill <session>Purpose : Kill session and cleanup
Steps :
Kill tmux session :
tmux kill-session -t "psm:$session_id" 2>/dev/null
Remove worktree :
worktree_path=$(jq -r ".sessions[\"$session_id\"].worktree" ~/.psm/sessions.json)
source_repo=$(jq -r ".sessions[\"$session_id\"].source_repo" ~/.psm/sessions.json)
cd "$source_repo"
git worktree remove "$worktree_path" --force
Update registry :
# Remove from sessions.json
cleanupPurpose : Clean up merged PRs and closed issues
Steps :
Read all sessions
For each PR session, check if merged :
gh pr view <pr_number> --repo <repo> --json merged,state
For each issue session, check if closed :
gh issue view <issue_number> --repo <repo> --json closed,state
Clean up merged/closed sessions :
Report :
Cleanup complete:
Removed: omc:pr-123 (merged)
Removed: omc:issue-42 (closed)
Kept: omc:feat-auth (active)
statusPurpose : Show current session info
Steps :
Detect current session from tmux or cwd:
tmux display-message -p "#{session_name}" 2>/dev/null
# or check if cwd is inside a worktree
Read session metadata :
cat .psm-session.json 2>/dev/null
Show status :
Current Session: omc:pr-123
Type: review
PR: #123 - Add webhook support
Branch: feature/webhooks
Created: 2 hours ago
| Error | Resolution |
|---|---|
| Worktree exists | Offer: attach, recreate, or abort |
| PR not found | Verify URL/number, check permissions |
| No tmux | Warn and skip session creation |
| No gh CLI | Error with install instructions |
The omc teleport command provides a lightweight alternative to full PSM sessions. It creates git worktrees without tmux session management — ideal for quick, isolated development.
# Create worktree for an issue or PR
omc teleport #123
omc teleport owner/repo#123
omc teleport https://github.com/owner/repo/issues/42
# Create worktree for a feature
omc teleport my-feature
# List existing worktrees
omc teleport list
# Remove a worktree
omc teleport remove issue/my-repo-123
omc teleport remove --force feat/my-repo-my-feature
| Flag | Description | Default |
|---|---|---|
--worktree | Create worktree (default, kept for compatibility) | true |
--path <path> | Custom worktree root directory | ~/Workspace/omc-worktrees/ |
--base <branch> | Base branch to create from | main |
--json |
~/Workspace/omc-worktrees/
├── issue/
│ └── my-repo-123/ # Issue worktrees
├── pr/
│ └── my-repo-456/ # PR review worktrees
└── feat/
└── my-repo-my-feature/ # Feature worktrees
| Feature | PSM | Teleport |
|---|---|---|
| Git worktree | Yes | Yes |
| Tmux session | Yes | No |
| Claude Code launch | Yes | No |
| Session registry | Yes | No |
| Auto-cleanup | Yes | No |
| Project aliases | Yes | No (uses current repo) |
Use PSM for full managed sessions. Use teleport for quick worktree creation.
Required:
git - Version control (with worktree support v2.5+)jq - JSON parsingtmux - Session management (optional, but recommended)Optional (per provider):
gh - GitHub CLI (for GitHub workflows)jira - Jira CLI (for Jira workflows)On first run, create default config:
mkdir -p ~/.psm/worktrees ~/.psm/logs
# Create default projects.json if not exists
if [[ ! -f ~/.psm/projects.json ]]; then
cat > ~/.psm/projects.json << 'EOF'
{
"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
}
}
EOF
fi
# Create sessions.json if not exists
if [[ ! -f ~/.psm/sessions.json ]]; then
echo '{"version":1,"sessions":{},"stats":{"total_created":0,"total_cleaned":0}}' > ~/.psm/sessions.json
fi
Weekly Installs
135
Repository
GitHub Stars
11.2K
First Seen
Jan 28, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
claude-code125
opencode123
cursor119
gemini-cli118
codex117
github-copilot109
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
155,300 周安装
Power BI报表设计专家咨询 | 可视化设计、用户体验优化、数据驱动决策指南
7,800 周安装
MkDocs AI 翻译器 | GitHub Copilot 文档本地化工具 | 多语言技术文档自动化翻译
7,700 周安装
AI就绪规范更新指南 - 结构化文档模板与最佳实践
7,800 周安装
OpenAPI 规范自动生成应用程序代码工具 - 快速构建完整可运行项目
7,700 周安装
GitHub Copilot Skill:my-pull-requests - 自动化管理您的拉取请求,提升代码审查效率
7,700 周安装
GitHub贡献指南助手 - 安全贡献代码、遵循项目规范、自动化PR流程
7,800 周安装
attach <session> | Attach to session | /psm attach omc:pr-123 |
kill <session> | Kill session | /psm kill omc:pr-123 |
cleanup | Clean merged/closed | /psm cleanup |
status | Current session info | /psm status |
Create session metadata :
cat > "$worktree_path/.psm-session.json" << EOF
{
"id": "$project_alias:pr-$pr_number",
"type": "review",
"project": "$project_alias",
"ref": "pr-$pr_number",
"branch": "<head_branch>",
"base": "<base_branch>",
"created_at": "$(date -Iseconds)",
"tmux_session": "psm:$project_alias:pr-$pr_number",
"worktree_path": "$worktree_path",
"source_repo": "$local_path",
"github": {
"pr_number": $pr_number,
"pr_title": "<title>",
"pr_author": "<author>",
"pr_url": "<url>"
},
"state": "active"
}
EOF
Update sessions registry :
# Add to ~/.psm/sessions.json
Create tmux session :
tmux new-session -d -s "psm:$project_alias:pr-$pr_number" -c "$worktree_path"
Launch Claude Code (unless --no-claude):
tmux send-keys -t "psm:$project_alias:pr-$pr_number" "claude" Enter
Output session info :
Session ready!
ID: omc:pr-123
Worktree: ~/.psm/worktrees/omc/pr-123
Tmux: psm:omc:pr-123
To attach: tmux attach -t psm:omc:pr-123
| Output as JSON |
false |