
Good Pm
- Updated July 14, 2026
- austinogilvie/promptkit
good-pm is a Claude Code skill in the AI & Agent Building category. A project management plugin to manage product specs, feature development, and bug fixes in your projects.
Key points
- good-pm
- AI & Agent Building
- AI-coding skill
Good Pm by the numbers
- Data as of Jul 15, 2026 (Skillselion catalog sync)
/plugin marketplace add austinogilvie/promptkit/plugin install good-pm@promptkitAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Last updated | July 14, 2026 |
|---|---|
| Repository | austinogilvie/promptkit ↗ |
What it does
A project management plugin to manage product specs, feature development, and bug fixes in your projects.
README.md
Good PM
Filesystem-based project management for Claude Code with specs, issues, and automatic context injection.
Good PM helps you manage software projects by:
- Creating structured specification documents
- Breaking specs into trackable, numbered issues
- Viewing project status at a glance
- Automatically injecting PM context into conversations
Installation
Install the plugin from PromptKit:
claude plugin install good-pm@promptkit
Or add manually by copying the good-pm/ directory to your plugins location.
Quick Start
# 1. Initialize Good PM in your project
/good-pm:setup
# 2. Create a specification
/good-pm:create-spec user-auth "OAuth2 authentication with Google and GitHub"
# 3. Break it into trackable issues
/good-pm:create-issues .good-pm/specs/SPEC_user-auth.md
# 4. View project status
/good-pm:issues
Commands
/good-pm:setup
Initialize Good PM in the current repository.
/good-pm:setup # Standard setup
/good-pm:setup --force # Overwrite existing installation
/good-pm:setup --no-settings # Skip hook installation
Creates the following structure:
.good-pm/
├── context/
│ ├── PM_CONTRACT.md # Vocabulary and conventions
│ └── session-update.md # Session update instructions
├── specs/ # Specification documents
├── issues/ # Issue files (NNN-description.md)
├── templates/
│ ├── SPEC_TEMPLATE.md
│ └── ISSUE_TEMPLATE.md
├── session/
│ └── current.md # Current session state
└── INDEX.md # Navigation and quick links
/good-pm:create-spec
Create a structured specification document.
From text summary:
/good-pm:create-spec api-caching "Redis-based caching layer for API responses"
From draft file:
/good-pm:create-spec payment-flow ./notes/payment-draft.md
The spec name must be lowercase kebab-case (e.g., user-auth, api-v2).
/good-pm:create-issues
Break a spec into discrete, numbered issue files.
/good-pm:create-issues .good-pm/specs/SPEC_user-auth.md
Issues are numbered sequentially (001, 002, ...) and placed in .good-pm/issues/.
/good-pm:issues
Display status summary of all specs and issues.
/good-pm:issues # Current directory
/good-pm:issues ./my-project # Specific project path
Status is derived from checkbox state:
- Open: No checkboxes checked (0/N)
- In Progress: Some checkboxes checked (M/N where 0 < M < N)
- Complete: All checkboxes checked (N/N)
Directory Structure
After running setup and creating specs/issues:
your-project/
├── .claude/
│ └── hooks/
│ ├── good-pm-context.sh # UserPromptSubmit hook
│ └── good-pm-session-update.py # Stop hook
├── .good-pm/
│ ├── context/
│ │ ├── PM_CONTRACT.md
│ │ └── session-update.md
│ ├── specs/
│ │ ├── SPEC_user-auth.md
│ │ └── SPEC_api-caching.md
│ ├── issues/
│ │ ├── 001-setup-database.md
│ │ ├── 002-implement-login.md
│ │ └── 003-add-validation.md
│ ├── templates/
│ │ ├── SPEC_TEMPLATE.md
│ │ └── ISSUE_TEMPLATE.md
│ ├── session/
│ │ └── current.md
│ └── INDEX.md
└── .claude/settings.local.json # Hook configuration
How It Works
Automatic Context Injection
The UserPromptSubmit hook runs on every prompt submission. If you're in a Good PM project (.good-pm/ exists), it injects:
- PM_CONTRACT.md - Status vocabulary, frontmatter fields, and conventions
- session/current.md - Current session state and handoff notes (if meaningful content exists)
This ensures Claude always has project management context without manual loading.
Session Continuity
The Stop hook runs when Claude is about to complete a response. It blocks completion until you review the session context, ensuring:
- Active work is documented
- Blockers are noted
- Next steps are captured
- Handoff notes are written for future sessions
The Future Self Test: "If I started a new conversation tomorrow, would this information change how I respond?"
Status Derivation
Status is inferred from checkboxes, not manual tagging:
## Tasks
- [ ] Create schema # Unchecked
- [x] Add migration # Checked
- [ ] Seed data # Unchecked
Result: In Progress (1/3)
Troubleshooting
Clear Plugin Cache
If you're developing or updating the plugin and changes aren't appearing:
# macOS
rm -rf ~/Library/Caches/claude-code/plugins/good-pm*
# Linux
rm -rf ~/.cache/claude-code/plugins/good-pm*
Then restart Claude Code.
Hook Not Firing
- Check
.claude/settings.local.jsonhas the hook configuration - Verify hook scripts are executable:
chmod +x .claude/hooks/good-pm-context.sh chmod +x .claude/hooks/good-pm-session-update.py - Run
/good-pm:setup --forceto reinstall hooks
"Good PM is not initialized" Error
Run /good-pm:setup in your project directory.
Context Not Being Injected
The context hook only runs when:
.good-pm/directory exists in current working directoryPM_CONTRACT.mdexists in.good-pm/context/
Check that you're in the correct directory.
Session Context Not Updating
The Stop hook requires:
.good-pm/session/directory to exist- Python 3 available in path
Run /good-pm:setup --force to ensure all files are properly installed.
Workflow Example
Start a new feature
/good-pm:create-spec notifications "Real-time push notifications for mobile"Review and expand the spec - Edit
.good-pm/specs/SPEC_notifications.mdBreak into issues
/good-pm:create-issues .good-pm/specs/SPEC_notifications.mdWork through issues - Check off tasks as you complete them
Check progress
/good-pm:issuesEnd session - The Stop hook reminds you to update session context
Next session - Context is auto-injected, you pick up where you left off
Version
1.0.0