project-session-manager

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Project Session Manager (PSM) Skill

项目会话管理器(PSM)工具

Quick Start: For simple worktree creation without tmux sessions, use
omc teleport
:
bash
omc teleport #123          # Create worktree for issue/PR
omc teleport my-feature    # Create worktree for feature
omc teleport list          # List worktrees
See 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.
快速开始: 若无需tmux会话仅创建简单工作树,可使用
omc teleport
bash
omc teleport #123          # 为议题/PR创建工作树
omc teleport my-feature    # 为功能创建工作树
omc teleport list          # 列出所有工作树
详情请见下方的【Teleport命令】章节。
借助Claude Code,通过git worktrees和tmux会话实现隔离开发环境的自动化管理,支持在多个任务、项目和代码仓库间并行工作。

Commands

命令列表

CommandDescriptionExample
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
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
命令描述示例
review <ref>
PR评审会话
/psm review omc#123
fix <ref>
议题修复会话
/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

Project References

项目引用格式

Supported formats:
  • Alias:
    omc#123
    (requires
    ~/.psm/projects.json
    )
  • Full:
    owner/repo#123
  • URL:
    https://github.com/owner/repo/pull/123
  • Current:
    #123
    (uses current directory's repo)
支持的引用格式:
  • 别名
    omc#123
    (需配置
    ~/.psm/projects.json
  • 完整格式
    owner/repo#123
  • URL
    https://github.com/owner/repo/pull/123
  • 当前仓库
    #123
    (使用当前目录对应的仓库)

Configuration

配置说明

Project Aliases (
~/.psm/projects.json
)

项目别名(
~/.psm/projects.json

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
  }
}
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
  }
}

Providers

支持的服务商

PSM supports multiple issue tracking providers:
ProviderCLI RequiredReference FormatsCommands
GitHub (default)
gh
owner/repo#123
,
alias#123
, GitHub URLs
review, fix, feature
Jira
jira
PROJ-123
(if PROJ configured),
alias#123
fix, feature
PSM支持多种议题追踪服务商:
服务商所需CLI工具引用格式支持命令
GitHub(默认)
gh
owner/repo#123
,
alias#123
, GitHub URL
review, fix, feature
Jira
jira
PROJ-123
(需配置PROJ),
alias#123
fix, feature

Jira Configuration

Jira配置

To use Jira, add an alias with
jira_project
and
provider: "jira"
:
json
{
  "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:
json
{
  "aliases": {
    "private": {
      "jira_project": "PRIV",
      "clone_url": "git@gitlab.internal:team/repo.git",
      "local": "~/Workspace/repo",
      "provider": "jira"
    }
  }
}
若要使用Jira,需在别名中添加
jira_project
provider: "jira"
json
{
  "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
替代:
json
{
  "aliases": {
    "private": {
      "jira_project": "PRIV",
      "clone_url": "git@gitlab.internal:team/repo.git",
      "local": "~/Workspace/repo",
      "provider": "jira"
    }
  }
}

Jira Reference Detection

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
.
仅当
PROJ
在别名中被明确配置为
jira_project
时,PSM才会将
PROJ-123
格式识别为Jira议题,避免将
FIX-123
这类分支名称误判为Jira议题。

Jira Examples

Jira使用示例

bash
undefined
bash
undefined

Fix a Jira issue (MYPROJ must be configured)

修复Jira议题(需已配置MYPROJ)

psm fix MYPROJ-123
psm fix MYPROJ-123

Fix using alias (recommended)

使用别名修复议题(推荐方式)

psm fix mywork#123
psm fix mywork#123

Feature development (works same as GitHub)

功能开发(与GitHub使用方式一致)

psm feature mywork add-webhooks
psm feature mywork add-webhooks

Note: 'psm review' is not supported for Jira (no PR concept)

注意:Jira不支持
psm review
命令(无PR概念)

Use 'psm fix' for Jira issues

请使用
psm fix
处理Jira议题

undefined
undefined

Jira CLI Setup

Jira CLI安装

Install the Jira CLI:
bash
undefined
安装Jira CLI:
bash
undefined

macOS

macOS

brew install ankitpokhrel/jira-cli/jira-cli
brew install ankitpokhrel/jira-cli/jira-cli

Linux

Linux

Configure (interactive)

交互式配置

jira init

The Jira CLI handles authentication separately from PSM.
jira init

Jira CLI的身份验证与PSM独立处理。

Directory Structure

目录结构

~/.psm/
├── projects.json       # Project aliases
├── sessions.json       # Active session registry
└── worktrees/          # Worktree storage
    └── <project>/
        └── <type>-<id>/
~/.psm/
├── projects.json       # 项目别名配置
├── sessions.json       # 活跃会话注册表
└── worktrees/          # 工作树存储目录
    └── <project>/
        └── <type>-<id>/

Session Naming

会话命名规则

TypeTmux SessionWorktree 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

类型Tmux会话名称工作树目录
PR评审
psm:omc:pr-123
~/.psm/worktrees/omc/pr-123
议题修复
psm:omc:issue-42
~/.psm/worktrees/omc/issue-42
功能开发
psm:omc:feat-auth
~/.psm/worktrees/omc/feat-auth

Implementation Protocol

实现流程

When the user invokes a PSM command, follow this protocol:
当用户调用PSM命令时,遵循以下流程:

Parse Arguments

解析参数

Parse
{{ARGUMENTS}}
to determine:
  1. Subcommand: review, fix, feature, list, attach, kill, cleanup, status
  2. Reference: project#number, URL, or session ID
  3. Options: --branch, --base, --no-claude, --no-tmux, etc.
解析
{{ARGUMENTS}}
以确定:
  1. 子命令:review、fix、feature、list、attach、kill、cleanup、status
  2. 引用信息:project#number、URL或会话ID
  3. 选项:--branch、--base、--no-claude、--no-tmux等

Subcommand:
review <ref>

子命令:
review <ref>

Purpose: Create PR review session
Steps:
  1. Resolve reference:
    bash
    # 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
  2. Fetch PR info:
    bash
    gh pr view <pr_number> --repo <repo> --json number,title,author,headRefName,baseRefName,body,files,url
  3. Ensure local repo exists:
    bash
    # If local path doesn't exist, clone
    if [[ ! -d "$local_path" ]]; then
      git clone "https://github.com/$repo.git" "$local_path"
    fi
  4. Create worktree:
    bash
    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"
  5. Create session metadata:
    bash
    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
  6. Update sessions registry:
    bash
    # Add to ~/.psm/sessions.json
  7. Create tmux session:
    bash
    tmux new-session -d -s "psm:$project_alias:pr-$pr_number" -c "$worktree_path"
  8. Launch Claude Code (unless --no-claude):
    bash
    tmux send-keys -t "psm:$project_alias:pr-$pr_number" "claude" Enter
  9. 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
用途:创建PR评审会话
步骤
  1. 解析引用信息:
    bash
    # 读取项目别名配置
    cat ~/.psm/projects.json 2>/dev/null || echo '{"aliases":{}}'
    
    # 解析引用格式:alias#num、owner/repo#num或URL
    # 提取:project_alias、repo(owner/repo)、pr_number、local_path
  2. 获取PR信息:
    bash
    gh pr view <pr_number> --repo <repo> --json number,title,author,headRefName,baseRefName,body,files,url
  3. 确保本地仓库存在:
    bash
    # 若本地路径不存在则克隆仓库
    if [[ ! -d "$local_path" ]]; then
      git clone "https://github.com/$repo.git" "$local_path"
    fi
  4. 创建工作树:
    bash
    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"
  5. 创建会话元数据:
    bash
    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
  6. 更新会话注册表:
    bash
    # 添加至~/.psm/sessions.json
  7. 创建tmux会话:
    bash
    tmux new-session -d -s "psm:$project_alias:pr-$pr_number" -c "$worktree_path"
  8. 启动Claude Code(除非指定--no-claude):
    bash
    tmux send-keys -t "psm:$project_alias:pr-$pr_number" "claude" Enter
  9. 输出会话信息:
    会话已准备就绪!
    
      ID: omc:pr-123
      工作树: ~/.psm/worktrees/omc/pr-123
      Tmux会话: psm:omc:pr-123
    
    接入会话:tmux attach -t psm:omc:pr-123

Subcommand:
fix <ref>

子命令:
fix <ref>

Purpose: Create issue fix session
Steps:
  1. Resolve reference (same as review)
  2. Fetch issue info:
    bash
    gh issue view <issue_number> --repo <repo> --json number,title,body,labels,url
  3. Create feature branch:
    bash
    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
  4. Create worktree:
    bash
    worktree_path="$HOME/.psm/worktrees/$project_alias/issue-$issue_number"
    git worktree add "$worktree_path" "$branch_name"
  5. Create session metadata (similar to review, type="fix")
  6. Update registry, create tmux, launch claude (same as review)
用途:创建议题修复会话
步骤:
  1. 解析引用信息(与review命令相同)
  2. 获取议题信息:
    bash
    gh issue view <issue_number> --repo <repo> --json number,title,body,labels,url
  3. 创建功能分支:
    bash
    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
  4. 创建工作树:
    bash
    worktree_path="$HOME/.psm/worktrees/$project_alias/issue-$issue_number"
    git worktree add "$worktree_path" "$branch_name"
  5. 创建会话元数据(与review类似,type="fix")
  6. 更新注册表、创建tmux会话、启动Claude Code(与review命令相同)

Subcommand:
feature <project> <name>

子命令:
feature <project> <name>

Purpose: Start feature development
Steps:
  1. Resolve project (from alias or path)
  2. Create feature branch:
    bash
    cd "$local_path"
    git fetch origin main
    branch_name="feature/$feature_name"
    git checkout -b "$branch_name" origin/main
  3. Create worktree:
    bash
    worktree_path="$HOME/.psm/worktrees/$project_alias/feat-$feature_name"
    git worktree add "$worktree_path" "$branch_name"
  4. Create session, tmux, launch claude (same pattern)
用途:启动功能开发会话
步骤:
  1. 解析项目信息(从别名或路径中获取)
  2. 创建功能分支:
    bash
    cd "$local_path"
    git fetch origin main
    branch_name="feature/$feature_name"
    git checkout -b "$branch_name" origin/main
  3. 创建工作树:
    bash
    worktree_path="$HOME/.psm/worktrees/$project_alias/feat-$feature_name"
    git worktree add "$worktree_path" "$branch_name"
  4. 创建会话、tmux会话、启动Claude Code(遵循相同流程)

Subcommand:
list [project]

子命令:
list [project]

Purpose: List active sessions
Steps:
  1. Read sessions registry:
    bash
    cat ~/.psm/sessions.json 2>/dev/null || echo '{"sessions":{}}'
  2. Check tmux sessions:
    bash
    tmux list-sessions -F "#{session_name}" 2>/dev/null | grep "^psm:"
  3. Check worktrees:
    bash
    ls -la ~/.psm/worktrees/*/ 2>/dev/null
  4. 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
用途:列出活跃会话
步骤:
  1. 读取会话注册表:
    bash
    cat ~/.psm/sessions.json 2>/dev/null || echo '{"sessions":{}}'
  2. 检查tmux会话:
    bash
    tmux list-sessions -F "#{session_name}" 2>/dev/null | grep "^psm:"
  3. 检查工作树:
    bash
    ls -la ~/.psm/worktrees/*/ 2>/dev/null
  4. 格式化输出:
    活跃PSM会话:
    
    ID                 | 类型    | 状态     | 工作树路径
    -------------------|---------|----------|---------------------------
    omc:pr-123        | 评审    | 活跃     | ~/.psm/worktrees/omc/pr-123
    omc:issue-42      | 修复    | 已断开   | ~/.psm/worktrees/omc/issue-42

Subcommand:
attach <session>

子命令:
attach <session>

Purpose: Attach to existing session
Steps:
  1. Parse session ID:
    project:type-number
  2. Verify session exists:
    bash
    tmux has-session -t "psm:$session_id" 2>/dev/null
  3. Attach:
    bash
    tmux attach -t "psm:$session_id"
用途:接入已有会话
步骤:
  1. 解析会话ID
    project:type-number
  2. 验证会话存在性:
    bash
    tmux has-session -t "psm:$session_id" 2>/dev/null
  3. 接入会话:
    bash
    tmux attach -t "psm:$session_id"

Subcommand:
kill <session>

子命令:
kill <session>

Purpose: Kill session and cleanup
Steps:
  1. Kill tmux session:
    bash
    tmux kill-session -t "psm:$session_id" 2>/dev/null
  2. Remove worktree:
    bash
    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
  3. Update registry:
    bash
    # Remove from sessions.json
用途:终止会话并清理资源
步骤:
  1. 终止tmux会话:
    bash
    tmux kill-session -t "psm:$session_id" 2>/dev/null
  2. 移除工作树:
    bash
    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
  3. 更新注册表:
    bash
    # 从sessions.json中移除该会话

Subcommand:
cleanup

子命令:
cleanup

Purpose: Clean up merged PRs and closed issues
Steps:
  1. Read all sessions
  2. For each PR session, check if merged:
    bash
    gh pr view <pr_number> --repo <repo> --json merged,state
  3. For each issue session, check if closed:
    bash
    gh issue view <issue_number> --repo <repo> --json closed,state
  4. Clean up merged/closed sessions:
    • Kill tmux session
    • Remove worktree
    • Update registry
  5. Report:
    Cleanup complete:
      Removed: omc:pr-123 (merged)
      Removed: omc:issue-42 (closed)
      Kept: omc:feat-auth (active)
用途:清理已合并的PR和已关闭的议题
步骤:
  1. 读取所有会话信息
  2. 检查每个PR会话是否已合并:
    bash
    gh pr view <pr_number> --repo <repo> --json merged,state
  3. 检查每个议题会话是否已关闭:
    bash
    gh issue view <issue_number> --repo <repo> --json closed,state
  4. 清理已合并/关闭的会话:
    • 终止tmux会话
    • 移除工作树
    • 更新注册表
  5. 输出清理结果:
    清理完成:
      已移除: omc:pr-123 (已合并)
      已移除: omc:issue-42 (已关闭)
      保留: omc:feat-auth (活跃)

Subcommand:
status

子命令:
status

Purpose: Show current session info
Steps:
  1. Detect current session from tmux or cwd:
    bash
    tmux display-message -p "#{session_name}" 2>/dev/null
    # or check if cwd is inside a worktree
  2. Read session metadata:
    bash
    cat .psm-session.json 2>/dev/null
  3. Show status:
    Current Session: omc:pr-123
    Type: review
    PR: #123 - Add webhook support
    Branch: feature/webhooks
    Created: 2 hours ago

用途:显示当前会话信息
步骤:
  1. 从tmux或当前目录检测会话:
    bash
    tmux display-message -p "#{session_name}" 2>/dev/null
    # 或检查当前目录是否位于工作树内
  2. 读取会话元数据:
    bash
    cat .psm-session.json 2>/dev/null
  3. 显示状态信息:
    当前会话: omc:pr-123
    类型: 评审
    PR: #123 - 添加Webhook支持
    分支: feature/webhooks
    创建时间: 2小时前

Error Handling

错误处理

ErrorResolution
Worktree existsOffer: attach, recreate, or abort
PR not foundVerify URL/number, check permissions
No tmuxWarn and skip session creation
No gh CLIError with install instructions
错误解决方法
工作树已存在提供选项:接入会话、重新创建或终止操作
PR不存在验证URL/编号,检查权限
未安装tmux发出警告并跳过会话创建
未安装gh CLI报错并提供安装指引

Teleport Command

Teleport命令

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.
omc teleport
命令是完整PSM会话的轻量替代方案,仅创建git工作树而不进行tmux会话管理,适用于快速创建隔离开发环境。

Usage

使用方式

bash
undefined
bash
undefined

Create worktree for an issue or PR

为议题或PR创建工作树

omc teleport #123 omc teleport owner/repo#123 omc teleport https://github.com/owner/repo/issues/42
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
omc teleport my-feature

List existing worktrees

列出所有已存在的工作树

omc teleport list
omc teleport list

Remove a worktree

移除工作树

omc teleport remove issue/my-repo-123 omc teleport remove --force feat/my-repo-my-feature
undefined
omc teleport remove issue/my-repo-123 omc teleport remove --force feat/my-repo-my-feature
undefined

Options

选项说明

FlagDescriptionDefault
--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
Output as JSON
false
标志描述默认值
--worktree
创建工作树(默认选项,为兼容保留)
true
--path <path>
自定义工作树根目录
~/Workspace/omc-worktrees/
--base <branch>
用于创建工作树的基础分支
main
--json
以JSON格式输出结果
false

Worktree Layout

工作树目录结构

~/Workspace/omc-worktrees/
├── issue/
│   └── my-repo-123/        # Issue worktrees
├── pr/
│   └── my-repo-456/        # PR review worktrees
└── feat/
    └── my-repo-my-feature/ # Feature worktrees
~/Workspace/omc-worktrees/
├── issue/
│   └── my-repo-123/        # 议题工作树
├── pr/
│   └── my-repo-456/        # PR评审工作树
└── feat/
    └── my-repo-my-feature/ # 功能开发工作树

PSM vs Teleport

PSM与Teleport对比

FeaturePSMTeleport
Git worktreeYesYes
Tmux sessionYesNo
Claude Code launchYesNo
Session registryYesNo
Auto-cleanupYesNo
Project aliasesYesNo (uses current repo)
Use PSM for full managed sessions. Use teleport for quick worktree creation.

特性PSMTeleport
Git工作树支持支持
Tmux会话支持不支持
自动启动Claude Code支持不支持
会话注册表支持不支持
自动清理支持不支持
项目别名支持不支持(使用当前仓库)
PSM适用于需要完整管理的会话场景,Teleport适用于快速创建工作树的场景。

Requirements

环境要求

Required:
  • git
    - Version control (with worktree support v2.5+)
  • jq
    - JSON parsing
  • tmux
    - Session management (optional, but recommended)
Optional (per provider):
  • gh
    - GitHub CLI (for GitHub workflows)
  • jira
    - Jira CLI (for Jira workflows)
必备工具:
  • git
    - 版本控制工具(需支持worktree功能,版本v2.5+)
  • jq
    - JSON解析工具
  • tmux
    - 会话管理工具(可选,但推荐安装)
可选工具(按服务商):
  • gh
    - GitHub CLI(用于GitHub工作流)
  • jira
    - Jira CLI(用于Jira工作流)

Initialization

初始化配置

On first run, create default config:
bash
mkdir -p ~/.psm/worktrees ~/.psm/logs
首次运行时,将创建默认配置:
bash
mkdir -p ~/.psm/worktrees ~/.psm/logs

Create default projects.json if not exists

若不存在则创建默认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
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

若不存在则创建sessions.json

if [[ ! -f ~/.psm/sessions.json ]]; then echo '{"version":1,"sessions":{},"stats":{"total_created":0,"total_cleaned":0}}' > ~/.psm/sessions.json fi
undefined
if [[ ! -f ~/.psm/sessions.json ]]; then echo '{"version":1,"sessions":{},"stats":{"total_created":0,"total_cleaned":0}}' > ~/.psm/sessions.json fi
undefined