coreyhaines31/pm
When you want to manage projects across your businesses using a kanban + Eisenhower methodology. One kanban per business (whatever portfolio of businesses, projects, or initiatives you run). Tool-agnostic — connects via API/MCP to whatever PM tool each business uses (Notion, GitHub Projects, Plane, Linear, Obsidian file-based, or manual mode). Async-first output. Six modes — setup (scaffold a new board for a business), triage (Eisenhower-sort the backlog), next (pick the next thing to work on, single board or across all), status (paste-ready async snapshot), unblock (diagnose Review/Blocked column), weekly (Friday pulse + week planning). Triggers on "/pm," "/pm setup," "/pm triage," "/pm next," "/pm status," "/pm unblock," "/pm weekly," "what should I work on next," "kanban status," "Eisenhower this," "triage my backlog," "what's blocked.
npx skills add https://github.com/coreyhaines31/makerskills --skill pm
Methodology-first project management. Kanban + Eisenhower + async. One board per business. Tool-agnostic via adapters.
Each business gets its own kanban with 5 columns:
Backlog → Ready → In Progress → Review/Blocked → Done/Archived
Eisenhower sits on top of the board — used to triage Backlog → Ready (which items make the cut) and to pick next from Ready (which Ready item to pull).
Urgent Not Urgent
Important Q1: Do Q2: Schedule ← Q2 is the high-leverage zone
Not Important Q3: Delegate Q4: Delete
Async-first: every status snapshot should read like a Loom you didn't have to record. Make work visible without requiring a meeting.
Parse the invocation:
| Invocation | Mode | Target |
|---|---|---|
| /pm setup [business] | setup | the named business |
| /pm triage [business] | triage | the named business (or ask) |
| /pm next [business] | next | the named business |
| /pm next | next | across all boards (cross-portfolio) |
| /pm status [business] | status | the named business (or ask) |
| /pm unblock [business] | unblock | the named business (or ask) |
| /pm weekly | weekly | all boards (Friday pulse) |
| /pm weekly [business] | weekly | the named business |
Read ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/boards.md (personal — real business list + tool mapping per business). Falls back to references/boards.md in the repo if the local file doesn't exist yet — that's a template.
Also try to load ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/team.local.md if present — this is where the user lists partners, active clients, and typical blocker phrasings. Use it to make status output specific ("Waiting on <partner>'s review") instead of generic.
| Field | Example |
|---|---|
| business | <slug> |
| tool | notion / github / plane / linear / obsidian / manual |
| board_id or URL | tool-specific |
| column overrides | only if this board doesn't use the default 5 columns |
If the business has no mapping yet, jump to setup automatically — ask which tool, save the mapping, return to the requested mode.
Read the relevant section of references/adapters.md for the tool. Each adapter section explains how to:
Adapters use:
$NOTION_API_KEY (already in zshenv). Database with Status select property.gh CLI (already authed). gh project item-list, gh project item-edit.$PLANE_API_KEY and workspace slug).${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/boards.md (NOT to references/boards.md in the repo — that's a template only). Create the parent directory if it doesn't exist yet./pm next with no business): pull Ready from every board, Eisenhower-rank, recommend top 1–3 across all businesses. Bias toward Q1 then Q2.Generate an async-shareable snapshot:
# [Business] — Status as of YYYY-MM-DD
**Shipped this week:** N cards
- <card title>
- <card title>
**In progress:** N cards
- <card title> — <who/what>
**Review/Blocked:** N cards
- <card title> — blocked on <reason>
**Up next:** top 2–3 from Ready
- <card title>
- <card title>
**Open question:** <one thing that would unblock progress if answered>
Output is paste-ready for Slack, Notion, email, partner DM.
Friday pulse + planning:
Default WIP per column (override in your local boards.md per business):
| Column | Default WIP |
|---|---|
| In Progress | 3 |
| Review/Blocked | (no limit — but flag if >5) |
If WIP exceeded in next mode, don't pull more — recommend finishing or moving something to Review/Blocked first.
When generating status / weekly outputs:
decide — when a project hits a real decision, route to /decidedeep-research — when a card needs research before it's actionablebusiness-brainstorm — when an idea on the Backlog deserves pressure-testing before triagejab-hook — when status / shipped items become BIP-post materialproject_*.md) — for portfolio context per businessboards.md per business if truly needed). If the cap is hit, don't pull more — recommend finishing or moving something to Review/Blocked.Take coreyhaines31/pm from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.