From project-manager
Set up, organize, and manage software projects from intent to investor-ready summary. Use this skill whenever the user wants to start a new project, take over an existing project folder, plan or replan work, decompose a problem into subprojects, generate a master plan, log session progress, answer "where am I" or "what should I do next", refresh an investor-facing project brief, or set up backups (GitHub, Backblaze B2, Cloudflare R2). Trigger even when the user does not say "project manager" — phrases like "help me start", "what's next on this", "plan this out", "summarize this project for an investor", or "organize this folder" all qualify.
npx claudepluginhub johncliechty/project-manager-package --plugin project-managerThis skill uses the workspace's default tool permissions.
Set up, organize, and operate a software project from first sketch to running system. The skill lives in two surfaces: a written discipline you (the agent) execute, and a small set of `bin/` scripts that handle deterministic plumbing so you don't reinvent it every session.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Set up, organize, and operate a software project from first sketch to running system. The skill lives in two surfaces: a written discipline you (the agent) execute, and a small set of bin/ scripts that handle deterministic plumbing so you don't reinvent it every session.
A user — solo founder, researcher, hobbyist — opens a chat with you and says one of:
Your job is to keep the project legible to itself: the same folder should be readable by Claude Code, Gemini CLI, Codex, Cursor, Cowork, OpenClaw, or a human picking it up cold.
Every project this skill manages runs the same loop, derived from John Liechty's AI Workflow:
references/critique-perspectives.md has eight angles to rotate through..pm/critique-passes.json — if you find yourself wanting a third pass, that's the trap. A polished plan is not the goal; a working project is.plans/subplans/<name>.md.The phrasing John uses: "Plan is form, implementation is matter — but the form is provisional."
When the user invokes you, your first job is to figure out which surface you're on. Ask if it's not obvious.
If new (no folder): Run node bin/pm.mjs init (interactively) or its equivalent. The script prompts for: project name, one-paragraph intent, target user, success criteria (measurable), known constraints, and time horizon. Capture answers, not answers-to-multiple-choice — you want their words. The script writes a starter folder layout (see "Per-project layout" below) and seeds PROJECT.md with their words and your structuring.
If existing: Read everything readable in the folder before proposing structure. Specifically read: README/notes, any *.md at the root, package manifests (package.json, pyproject.toml, Cargo.toml), and the most recent ten files by mtime. Then propose a layout as a diff — what you'd add, what you'd leave alone — and wait for approval before writing. Existing-project bootstrap is references/existing-vs-new.md.
Every project this skill manages has the same skeleton. Use bin/pm.mjs init to create it; never invent a different shape — the consistency is what lets a fresh agent or a human pick the project up cold.
<project>/
├── README.md # one-screen orientation for any reader
├── PROJECT.md # the problem, the goal, the constraints
├── MASTER-PLAN.md # current plan — provisional, edited as built
├── plans/
│ ├── proto-v1.md # archived early plans (read-only)
│ ├── proto-v2.md
│ ├── critique-pass-1.md # full text of pass-1 critique
│ ├── critique-pass-2.md # full text of pass-2 critique
│ └── subplans/ # one file per decomposed subpart
├── briefs/
│ ├── investor-brief-current.md # the latest investor-readable summary
│ └── archive/ # daily snapshots: investor-brief-YYYY-MM-DD.md
├── logs/
│ ├── sessions/ # one file per working session
│ ├── decisions/ # significant choices, append-only
│ └── critique/ # raw critique transcripts
├── code/ # the actual product — subdirs as needed
├── data/ # project data; backed up to B2/R2 if configured
├── skills/ # project-specific skills (optional)
├── tools/ # project-specific helper scripts (optional)
├── CLAUDE.md # orientation for Claude Code
├── GEMINI.md # orientation for Gemini CLI
├── AGENTS.md # cross-tool orientation (lingua franca)
├── GWLabs.md # GWL-specific orientation (only on GWL projects)
├── .pm/
│ ├── state.json # what /status and /what-now read
│ ├── critique-passes.json # enforces the bounded-iteration rule
│ └── routing.yaml # optional: which model for which task
└── .git/ # local repo, initialized at bootstrap
CLAUDE.md, GEMINI.md, and AGENTS.md are generated from a single source — the project's actual state — by the bootstrap script. They differ only in the small bits each tool reads idiosyncratically; the core orientation is identical. This is deliberate: the project's truth lives in PROJECT.md and MASTER-PLAN.md, not in three drifting copies.
These are the entry points. You can run them yourself when context makes it obvious; otherwise, suggest them.
| Command | What it does |
|---|---|
pm init | Bootstrap a new project (interactive) or absorb an existing folder (proposes diff first). |
pm status | Reads .pm/state.json and the last 5 session logs. Prints: phase, blockers, last-touched files, open subplans, critique-pass counter. |
pm what-now | Ranked recommendation of what to do next. Reads master plan, subplan states, blockers, critique counter, and time-since-last-investor-brief. Prints top 3, justifies each. |
pm log "<entry>" | Append a one-line entry to today's session log. Use liberally; cheap memory. |
pm log --decision "<entry>" | Append to logs/decisions/ (append-only ledger). Use for choices that future-you will want to know the why of. |
pm brief | Regenerate briefs/investor-brief-current.md from current state, archive yesterday's. Idempotent. |
pm brief --schedule | Register the daily 7 AM Cowork scheduled task. Optional --windows-task to also install a Windows Task Scheduler entry. |
pm critique <plan-file> | Runs the bounded 2-pass critique. Refuses pass 3 with an explanation. |
pm decompose <plan-file> | Drafts subplans from a master plan. Writes one stub per subpart. |
pm github-init | Wraps gh repo create --private and pushes. Skips if gh isn't installed and prints how to install. |
| `pm backup <b2 | r2>` |
pm windows-task install | Installs a Windows Task Scheduler entry pointing at pm brief. |
This is the most-asked question and worth getting right. Read references/what-now-ranking.md for the full scoring; the gist:
blockedBy field is empty in .pm/state.json.briefs/investor-brief-current.md is more than 24h old, recommend pm brief as one of the top three (cheap, high signal-to-cost)..env, lower it.The output is three options with one-line justifications, not a single dictate. The user decides.
MASTER-PLAN.md honestThe master plan is the most-edited file in the project. Two rules keep it honest:
plans/proto-vN.md are the historical record; MASTER-PLAN.md is current truth.Status: line: proto, critiqued-1, critiqued-2-final, building, built, dropped. When promoting a section past critiqued-2-final, the script bumps .pm/critique-passes.json. The pass counter is per-section, not project-wide.templates/MASTER-PLAN.md shows the shape.
The brief is regenerated daily. It reads:
PROJECT.md (the unchanging "what is this") — for the lede.MASTER-PLAN.md — for the "where we're going".logs/sessions/ — for "what moved".logs/decisions/ (last 14 days) — for "key choices"..pm/state.json — for "what's blocking".The output is templates/INVESTOR-BRIEF.md, populated. Audience: a smart investor who is not technical. Avoid jargon, avoid dependency lists, lead with the user-visible thing. references/investor-brief-style.md has the rubric.
The default trigger is a Cowork scheduled task at 07:00 local. pm brief --schedule registers it. For unattended overnight runs (Cowork not open), pm windows-task install writes a Task Scheduler XML and registers it. On Mac/Linux, pm brief --schedule --cron prints the crontab line to add.
The kit ships with three backup paths. Each is opt-in — pm init asks, but you can defer.
pm github-init runs gh repo create --private --source=. --remote=origin --push. If gh isn't installed, it prints exactly how (brew install gh / winget install GitHub.cli / apt install gh). The kit never creates accounts on the user's behalf.pm backup b2 writes an rclone config template and a bin/backup-data.sh that does an encrypted nightly snapshot of data/. The user creates the B2 bucket and application key themselves; the script never asks for credentials in chat.pm backup r2 is the symmetric command.references/backup-options.md has the full tradeoff table including OneDrive/iCloud caveats. (Note: this workspace learned the hard way that OneDrive's file-on-demand sync engine corrupts webpack caches and serializes session locks. Don't put node_modules, .next, or any agent runtime cwd in OneDrive.)
Projects often need ad-hoc skills (e.g., "convert these PDFs", "scrape this site"). When you (the agent) hit one:
.claude/skills/. In OpenClaw: run openclaw skills check. In Cowork: check <available_skills>..pm/state.json under skillRepo.skills/ folder so the project remains self-contained for collaborators who don't have the same global setup.This per-project mirror is what makes the standalone kit portable — when someone clones the repo, they get the skills the project actually uses, not a list of names they have to chase.
Every working session ends with pm log "<one-line summary>". That's it. Cheap, append-only, one file per day in logs/sessions/YYYY-MM-DD.md. The investor brief and pm what-now both read this — if you don't log, neither works well.
For substantive sessions (a hard problem solved, a direction changed), use pm log --decision "<entry>". The decisions log is the project's institutional memory; it's what pm what-now reads to avoid recommending something the user already considered and rejected.
templates/ — populated when pm init runs. Includes PROJECT.md, MASTER-PLAN.md, INVESTOR-BRIEF.md, SUBPLAN.md, SESSION-LOG.md, CLAUDE.md, GEMINI.md, AGENTS.md, GWLabs.md, .gitignore.references/operating-loop.md — full text of the bounded-iteration discipline, with the trap patterns to avoid.references/critique-perspectives.md — eight critique angles with example prompts.references/decomposition.md — heuristics for splitting a master plan into subplans that don't overlap.references/investor-brief-style.md — the rubric and an annotated example.references/what-now-ranking.md — the recommendation algorithm.references/backup-options.md — GitHub/B2/R2/OneDrive tradeoffs.references/existing-vs-new.md — bootstrap branches.Read references on demand — don't load all of them upfront. The cost of consulting one is small; the cost of carrying eight in context for every turn is not.
.env. If a user pastes one, route them to .env and tell them.