| name | ppm |
| description | Personal project manager CLI. Use when the user asks about GitHub repos, projects, PRs, local clones, or ticket branch status. Wraps gh CLI with project-aware config. |
ppm - Personal Project Manager
CLI for managing GitHub repos, projects, clones, PRs, and ticket branches.
Config: ~/.config/ppm/config.yaml
Cache: ~/.cache/ppm/
Run with: uv run ppm <command> (from /home/v/r/ppm) or ppm if installed globally.
Commands
ppm repos
ppm repos dh
ppm repos splunk
ppm repos --refresh
ppm clone <repo>
ppm clone <repo> --yes
ppm pr <project-or-repo>
ppm tickets list
ppm tickets list dh
ppm tickets search <query>
ppm specs list
ppm projects list
ppm projects add <name> <prefix>
ppm here
ppm here -r
Config (~/.config/ppm/config.yaml)
repos_root: ~/r
zaira: true
orgs:
- myorg
projects:
foo:
prefixes:
- foo-
bar:
prefixes:
- bar-
Key Conventions
- Expected clone path:
repos_root / project / repo-name (e.g. ~/r/foo/foo-core)
- Non-standard paths recorded in
~/.cache/ppm/locations.json via ppm here
- Path colors: green = at expected location, yellow = override path recorded
- Branch column only shown when a filter is active (too slow for all repos)
- Ticket IDs extracted from branch names matching
[A-Z]+-\d+ (e.g. AC-1682)
- Ticket summaries fetched via
zaira get --min and cached permanently
Files
| File | Purpose |
|---|
ppm/cli.py | All commands |
ppm/repos.py | gh repo list fetching |
ppm/config.py | Config loading (ruamel.yaml, preserves comments) |
ppm/cache.py | JSON file cache in ~/.cache/ppm/ |
ppm/locations.py | Local clone path tracking + git helpers |
ppm/gh_auth.py | gh auth account switching + SSH detection |