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, GitH
Install
npx skills add https://github.com/coreyhaines31/makerskills/tree/main/skills/pm
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install coreyhaines31-makerskills@llmmart
git clone https://github.com/coreyhaines31/makerskills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole coreyhaines31/makerskills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
/pm — Project management across the portfolio
Methodology-first project management. Kanban + Eisenhower + async. One board per business. Tool-agnostic via adapters.
Mental model
Each business gets its own kanban with 5 columns:
Backlog → Ready → In Progress → Review/Blocked → Done/Archived
- Backlog: everything that might matter — not yet committed
- Ready: triaged, well-defined, can be picked up
- In Progress: actively being worked
- Review/Blocked: waiting on someone else, review, or external dependency
- Done/Archived: shipped or killed
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.
Step 1 — Detect mode and target
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 |
Step 2 — Load board config + personal overlay
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
| 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.
Step 3 — Load the adapter
Read the relevant section of references/adapters.md for the tool. Each adapter section explains how to:
- List cards / issues / pages by column
- Read a single card's full content
- Create a card
- Move a card between columns
- Add a comment / note
Adapters use:
- Notion →
$NOTION_API_KEY(already in zshenv). Database withStatusselect property. - GitHub Projects →
ghCLI (already authed).gh project item-list,gh project item-edit. - Plane → Plane API (needs
$PLANE_API_KEYand workspace slug). - Linear → Linear MCP or API key.
- Obsidian → local kanban markdown files in the vault. Read/write directly.
- Manual → ask the user to paste the current board state; offer to write back to a local markdown file.
Step 4 — Run the mode
setup
- Ask which tool the business uses
- Walk through column setup (default 5 columns; offer custom)
- Save mapping to
${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/boards.md(NOT toreferences/boards.mdin the repo — that's a template only). Create the parent directory if it doesn't exist yet. - Optionally seed the board with starter cards from a conversation about what's on the user's mind for that business
triage
- Pull the Backlog column
- Apply Eisenhower (Q1/Q2/Q3/Q4) — show the user the matrix view
- Recommend moves:
- Q1 (urgent + important) → move to Ready or In Progress now
- Q2 (important, not urgent) → move to Ready, schedule when
- Q3 (urgent, not important) → delegate (to whom?) or move to Ready if no one
- Q4 (neither) → archive
- Apply moves via the adapter (or output text the user applies manually)
next
- Single board: pull Ready, then In Progress. If WIP exceeded, surface what to finish first. If WIP available, recommend top Ready item by Eisenhower priority.
- Cross-portfolio (
/pm nextwith no business): pull Ready from every board, Eisenhower-rank, recommend top 1–3 across all businesses. Bias toward Q1 then Q2.
status
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.
unblock
- Read everything in Review/Blocked
- For each card: surface the blocker, suggest an action (nudge X, escalate to Y, descope, kill, move back to In Progress if blocker is gone)
- Output a short list of moves
weekly
Friday pulse + planning:
- For each board: shipped this week, in progress, blocked
- Cross-portfolio: where's momentum? where's drift?
- Plan next week: 3–5 Q2 items to pull from Ready into In Progress on Monday
- Output the combined snapshot — pasteable into Notion weekly log, partner update, or personal journal
WIP limits
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.
Async-first writing rules
When generating status / weekly outputs:
- Lead with the headline — what shipped this week, or what's at risk
- Be specific — "shipped X" not "made progress on Y"
- No verbs without subjects — write so the reader can pick up cold
- Blockers name the blocker — "waiting on designer's review" not "blocked"
- Open questions are explicit — one bolded line per status that asks for what would unblock momentum
Composes with
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 material- Memory (
project_*.md) — for portfolio context per business
Notes on quality
- Limit WIP. Multitasking is the most reliable way to ship nothing. Cap In Progress at 3 (override in your local
boards.mdper business if truly needed). If the cap is hit, don't pull more — recommend finishing or moving something to Review/Blocked. - Lead with the headline in every status output — what shipped this week, or what's at risk. Not "made progress on X" — that's noise.
- Be specific. "Shipped the primary logo variant" beats "made progress on branding." Specificity signals real motion; vagueness signals none.
- No verbs without subjects. Write status so the reader can pick up cold — 3 weeks later or forwarded to a partner who missed the last update.
- Blockers name the blocker. "Waiting on designer's review of the homepage draft" — not "blocked." Blockers without names create no urgency.
- Open questions are explicit — one bolded line per status that asks for what would unblock momentum. Async momentum lives or dies on how well open questions are surfaced.
- Tool-agnostic by design. pm speaks Kanban + Eisenhower; the adapters (Notion / GitHub / Plane / Linear / Obsidian / manual) translate. Adding a new tool = one adapter file, not a rewrite.
Files (makerskills)
-
references
-
adapters.md 5.9 KB
# Adapters How `pm` reads from / writes to each PM tool. Add new adapters here as needed. Each business board has a `tool` value in `boards.md` that selects one of these adapters. --- ## notion **Auth:** `$NOTION_API_KEY` (in `~/.zshenv`). No MCP — call API directly. See `reference_notion_api.md` in memory. **Pattern:** Each business board is a Notion database with these properties: - `Name` (title) - `Status` (select: Backlog / Ready / In Progress / Review/Blocked / Done) — defaults; override in `boards.md` - `Priority` (select: Q1 / Q2 / Q3 / Q4) — Eisenhower quadrant - `Owner` (people or text) - `Size` (select: XS / S / M / L) **Operations:** ```bash # List cards by column curl -X POST "https://api.notion.com/v1/databases/<db-id>/query" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2022-06-28" \ -H "Content-Type: application/json" \ -d '{"filter":{"property":"Status","select":{"equals":"In Progress"}}}' # Read one card (page) curl -X GET "https://api.notion.com/v1/pages/<page-id>" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2022-06-28" # Move a card to another column curl -X PATCH "https://api.notion.com/v1/pages/<page-id>" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2022-06-28" \ -H "Content-Type: application/json" \ -d '{"properties":{"Status":{"select":{"name":"Ready"}}}}' # Create a new card curl -X POST "https://api.notion.com/v1/pages" \ -H "Authorization: Bearer $NOTION_API_KEY" \ -H "Notion-Version: 2022-06-28" \ -H "Content-Type: application/json" \ -d '{"parent":{"database_id":"<db-id>"},"properties":{"Name":{"title":[{"text":{"content":"<title>"}}]},"Status":{"select":{"name":"Backlog"}}}}' ``` --- ## github **Auth:** `gh` CLI (already authed). Works for both GitHub Issues and GitHub Projects (v2). **Pattern A — Issues on a single repo:** The "board" is the repo's issues filtered by label (e.g., `column:ready`, `column:in-progress`). Or by Project (v2) status field. ```bash # List issues in a column (label-based) gh issue list --repo <owner>/<repo> --label "column:ready" --json number,title,labels # Move (change label) gh issue edit <num> --repo <owner>/<repo> --remove-label "column:ready" --add-label "column:in-progress" # Create gh issue create --repo <owner>/<repo> --title "<title>" --label "column:backlog" ``` **Pattern B — GitHub Projects (v2):** ```bash # List items in a column (Status field) gh project item-list <project-number> --owner <owner> --format json # Move item (set Status field) gh project item-edit --id <item-id> --field-id <status-field-id> --single-select-option-id <option-id> --project-id <project-id> ``` For Projects v2, the skill needs to discover field IDs once via `gh project field-list` and cache them in `boards.md`. --- ## plane **Auth:** Plane API key (set as `$PLANE_API_KEY` in `~/.zshenv` if not yet — prompt the user if missing). Workspace slug from `boards.md`. **Pattern:** Plane has Projects → Modules/Cycles → Issues. The "board" maps to a Plane Project; columns map to Plane "State" values. ```bash # List issues in a state curl -X GET "https://api.plane.so/api/v1/workspaces/<workspace>/projects/<project-id>/issues/?state__name=Ready" \ -H "X-API-Key: $PLANE_API_KEY" # Move issue (change state) curl -X PATCH "https://api.plane.so/api/v1/workspaces/<workspace>/projects/<project-id>/issues/<issue-id>/" \ -H "X-API-Key: $PLANE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"state": "<state-id-for-In Progress>"}' ``` Note: Plane uses state IDs, not names — discover and cache once per workspace. --- ## linear **Auth:** Linear MCP if installed, else `$LINEAR_API_KEY`. Prefer MCP when available. **Pattern:** Each Linear Team or Project maps to a board. Columns map to workflow states. If using the Linear MCP, the skill calls those tools directly. If using the API: ```bash curl -X POST "https://api.linear.app/graphql" \ -H "Authorization: $LINEAR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query":"{ issues(filter: {team: {key: {eq: \"<team-key>\"}}, state: {name: {eq: \"In Progress\"}}}) { nodes { id title } } }"}' ``` --- ## obsidian **Auth:** none — local files. **Pattern:** Obsidian Kanban plugin stores boards as markdown files with `## Column Name` headings. Each card is a `- [ ] Card title` bullet under its column. ``` ## Backlog - [ ] Card A - [ ] Card B ## Ready - [ ] Card C ## In Progress - [ ] Card D ## Review/Blocked - [ ] Card E — blocked on <person> ## Done/Archived - [x] Card F ``` **Operations:** - **Read**: `Read` the markdown file at the path in `boards.md` - **Move**: edit the file — remove card from old column, add under new column - **Create**: append a bullet under the right column - **Done**: change `[ ]` to `[x]` and move to Done section Watch out: Obsidian Kanban supports embedded YAML metadata blocks per card (priority, due, assignee). Preserve them when moving cards. --- ## manual **Auth:** none. When no tool is connected (or the user doesn't want one for a particular business), `pm` works in conversation: 1. Ask the user to paste the current board state (or describe verbally) 2. Run the requested mode against that snapshot 3. Output recommended moves as plain text 4. Optionally: persist a snapshot to `${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/boards-cache/<business>.md` so subsequent runs don't require re-pasting (with a clear warning that the cache is stale until next paste) — never inside the skill folder; upgrades wipe it The cache file uses the same Obsidian-style markdown format above so it's portable. --- ## Adding a new adapter When the user starts using a new tool (Trello, Jira, Asana, ClickUp, etc.): 1. Add a new section above with: auth method, board structure, list/read/move/create operations 2. Add the tool as a valid value in `boards.md` 3. Test once with a real board before relying on it -
boards.md 1.1 KB
# Boards — per-business config (TEMPLATE) This is the template. Your real board mappings live in `${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/pm/boards.md` — not in this repo. Copy the schema below and populate it there. One row per business. Populated by `/pm setup [business]` and edited freely. When the skill targets a business not listed in your local config, it falls back to `manual` mode and prompts setup. | business | tool | board_id / URL / path | columns (if custom) | WIP override | |---|---|---|---|---| | _example_project_a_ | _notion_ | _<db-id>_ | _default_ | _default_ | _No boards configured yet. Run `/pm setup <business>` to start._ --- ## Default columns If a row doesn't list custom columns, the skill uses: ``` Backlog → Ready → In Progress → Review/Blocked → Done/Archived ``` ## Default WIP ``` In Progress: 3 Review/Blocked: no cap (flag at 5+) Ready: soft cap 10 ``` ## Cross-portfolio WIP Max **5 In Progress** across all boards combined. Above that, `/pm next` (cross-board) recommends finishing something before pulling new work. -
methodology.md 5 KB
# Methodology — kanban + Eisenhower + async ## Kanban core ### Why kanban - **Make work visible.** Cards on columns. Nothing hidden in someone's head. - **Pull, don't push.** Only start new work when capacity opens — finishing > starting. - **Limit WIP.** Multitasking is the most reliable way to ship nothing. Cap In Progress. - **Flow over batch.** Small cards moving steadily beats heroic sprints. - **Inspect and adapt.** Look at flow weekly. If cards pile up in one column, that's the constraint. ### The 5-column flow (the user's default) ``` Backlog → Ready → In Progress → Review/Blocked → Done/Archived ``` - **Backlog**: everything that *might* matter. Wide net. No commitment yet. - **Ready**: triaged. Well-defined enough that anyone could pick it up. Has acceptance criteria. - **In Progress**: actively being worked. Strict WIP limit. - **Review/Blocked**: waiting on someone or something external. Should be the shortest-lived state — if a card lives here >5 days, escalate or kill. - **Done/Archived**: shipped or explicitly killed. Archived weekly. ### Card hygiene A good card has: - **Title** — verb-first ("Ship waitlist email" not "Waitlist email") - **Acceptance criteria** — what does "done" look like? 1–3 bullets. - **Owner** — even for solo projects: which "hat" is wearing this? - **Size** — XS / S / M / L (XS = <2 hrs, S = <1 day, M = 2–3 days, L = >1 week — break it down) Cards that don't meet hygiene live in Backlog, not Ready. ## Eisenhower matrix — the prioritization overlay ``` Urgent Not Urgent Important Q1: Do Q2: Schedule Not Important Q3: Delegate Q4: Delete ``` ### Quadrant rules - **Q1 — Urgent + Important.** Do it. Move to Ready (or In Progress if capacity). These earn priority within Ready. - **Q2 — Important, Not Urgent.** *This is where leverage lives.* Schedule it. Most Q2 items become Q1 emergencies if neglected — proactively pulling Q2 is the difference between operators who compound and ones who firefight. - **Q3 — Urgent, Not Important.** Delegate. If there's nobody to delegate to (solo project), ask: is this actually important and I'm mislabeling it, or is it actually noise I'm letting trick me? - **Q4 — Not Urgent, Not Important.** Archive. The hardest skill in PM is closing tabs. ### When to apply Eisenhower 1. **During Backlog triage** — sort Backlog into Q1/Q2/Q3/Q4; Q1+Q2 candidates move to Ready, Q3 gets delegated or noted, Q4 gets archived. 2. **When picking next from Ready** — within Ready, Q1 > Q2 > Q3. 3. **During weekly planning** — bias next week's pull toward Q2 (preventative + high-leverage). ### Common Eisenhower mistakes - **Mislabeling Q3 as Q1.** "Urgent" feels urgent because someone else made it urgent. Test: would this matter if you didn't do it for a week? - **Q4 sneaking into Ready as "easy wins."** If it's not important, the only thing easy about it is the time it takes from Q2 work. - **Endless Q2.** Q2 is great in moderation. Too many Q2 cards in Ready = the board is wishful thinking, not a commitment. Cap Q2 cards in Ready at ~5 per board. ## Async-first You're likely running multiple businesses with partners and async clients. Async-first PM means: 1. **Status visible without you.** Anyone should be able to look at the board and know where things stand. No "let me catch you up" calls. 2. **Decisions documented.** When a card moves between columns, the why is in the card or a comment. Compose with `/decide` for big calls. 3. **Cards read like messages.** Title = headline. Body = what a colleague would need to pick this up cold. No "see Slack thread" — link the thread *and* summarize. 4. **Status updates are written, not spoken.** Use the `/pm status` output format. Send a Slack message. Don't call. 5. **Reduce back-and-forth.** Every card has owner + acceptance criteria so reviewers don't ping you to ask "what should I check for." ## Cross-portfolio prioritization When you have N businesses each with their own kanban, the meta-decision is "which board should I work in today?" Heuristics, in order: 1. **Q1 across all boards first.** Even a Q2 on a hot business loses to a Q1 on a quieter one. 2. **Then: revenue or strategic lever.** Among Q2 items across boards, pull from the business with the most leverage right now. 3. **Then: momentum tax.** If a business has gone 14+ days without progress, prioritize ANY card there. Drift kills compound businesses faster than slow execution. 4. **Then: energy fit.** If two cards are tied, pick the one that matches your current state. Morning analytical brain ≠ end-of-day creative brain. ## WIP limits — recommended defaults Per business board (override per business in `boards.md`): | Column | Default WIP | |---|---| | In Progress | **3** (max) | | Review/Blocked | no cap, but flag at 5+ | | Ready | soft cap at 10 — more than that means you're hoarding, not committing | Cross-portfolio: across all businesses, **don't exceed 5 In-Progress total**. Each business burns context-switch tax; more than 5 means you're not really In Progress anywhere.
-
-
SKILL.md 8.8 KB
--- name: pm description: 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." metadata: version: 0.1.1 --- # /pm — Project management across the portfolio Methodology-first project management. Kanban + Eisenhower + async. One board per business. Tool-agnostic via adapters. ## Mental model Each business gets its own kanban with 5 columns: ``` Backlog → Ready → In Progress → Review/Blocked → Done/Archived ``` - **Backlog**: everything that *might* matter — not yet committed - **Ready**: triaged, well-defined, can be picked up - **In Progress**: actively being worked - **Review/Blocked**: waiting on someone else, review, or external dependency - **Done/Archived**: shipped or killed **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. ## Step 1 — Detect mode and target 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 | ## Step 2 — Load board config + personal overlay 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. ## Step 3 — Load the adapter Read the relevant section of `references/adapters.md` for the tool. Each adapter section explains how to: - List cards / issues / pages by column - Read a single card's full content - Create a card - Move a card between columns - Add a comment / note Adapters use: - **Notion** → `$NOTION_API_KEY` (already in zshenv). Database with `Status` select property. - **GitHub Projects** → `gh` CLI (already authed). `gh project item-list`, `gh project item-edit`. - **Plane** → Plane API (needs `$PLANE_API_KEY` and workspace slug). - **Linear** → Linear MCP or API key. - **Obsidian** → local kanban markdown files in the vault. Read/write directly. - **Manual** → ask the user to paste the current board state; offer to write back to a local markdown file. ## Step 4 — Run the mode ### setup - Ask which tool the business uses - Walk through column setup (default 5 columns; offer custom) - Save mapping to `${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. - Optionally seed the board with starter cards from a conversation about what's on the user's mind for that business ### triage - Pull the Backlog column - Apply Eisenhower (Q1/Q2/Q3/Q4) — show the user the matrix view - Recommend moves: - Q1 (urgent + important) → move to Ready or In Progress now - Q2 (important, not urgent) → move to Ready, schedule when - Q3 (urgent, not important) → delegate (to whom?) or move to Ready if no one - Q4 (neither) → archive - Apply moves via the adapter (or output text the user applies manually) ### next - **Single board**: pull Ready, then In Progress. If WIP exceeded, surface what to finish first. If WIP available, recommend top Ready item by Eisenhower priority. - **Cross-portfolio** (`/pm next` with no business): pull Ready from every board, Eisenhower-rank, recommend top 1–3 across all businesses. Bias toward Q1 then Q2. ### status Generate an async-shareable snapshot: ```markdown # [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. ### unblock - Read everything in Review/Blocked - For each card: surface the blocker, suggest an action (nudge X, escalate to Y, descope, kill, move back to In Progress if blocker is gone) - Output a short list of moves ### weekly **Friday pulse + planning**: 1. For each board: shipped this week, in progress, blocked 2. Cross-portfolio: where's momentum? where's drift? 3. Plan next week: 3–5 Q2 items to pull from Ready into In Progress on Monday 4. Output the combined snapshot — pasteable into Notion weekly log, partner update, or personal journal ## WIP limits 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. ## Async-first writing rules When generating status / weekly outputs: - **Lead with the headline** — what shipped this week, or what's at risk - **Be specific** — "shipped X" not "made progress on Y" - **No verbs without subjects** — write so the reader can pick up cold - **Blockers name the blocker** — "waiting on designer's review" not "blocked" - **Open questions are explicit** — one bolded line per status that asks for what would unblock momentum ## Composes with - `decide` — when a project hits a real decision, route to `/decide` - `deep-research` — when a card needs research before it's actionable - `business-brainstorm` — when an idea on the Backlog deserves pressure-testing before triage - `jab-hook` — when status / shipped items become BIP-post material - Memory (`project_*.md`) — for portfolio context per business ## Notes on quality - **Limit WIP.** Multitasking is the most reliable way to ship nothing. Cap In Progress at 3 (override in your local `boards.md` per business if truly needed). If the cap is hit, don't pull more — recommend finishing or moving something to Review/Blocked. - **Lead with the headline** in every status output — what shipped this week, or what's at risk. Not "made progress on X" — that's noise. - **Be specific.** "Shipped the primary logo variant" beats "made progress on branding." Specificity signals real motion; vagueness signals none. - **No verbs without subjects.** Write status so the reader can pick up cold — 3 weeks later or forwarded to a partner who missed the last update. - **Blockers name the blocker.** "Waiting on designer's review of the homepage draft" — not "blocked." Blockers without names create no urgency. - **Open questions are explicit** — one bolded line per status that asks for what would unblock momentum. Async momentum lives or dies on how well open questions are surfaced. - **Tool-agnostic by design.** pm speaks Kanban + Eisenhower; the adapters (Notion / GitHub / Plane / Linear / Obsidian / manual) translate. Adding a new tool = one adapter file, not a rewrite.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.