ProjectMan

Every project you have, what state it is in, and Claude Code one keystroke away.

A projects directory grows past the point where you can hold it in your head. ProjectMan indexes it, shows the git state and outstanding work for every project in it, and launches a session into the one you pick.

Private Windows 11 Qt / C++20 v0.6.0
Get in touch
Shape

Two front ends over one core.

pm is a console picker: type to filter, Enter to launch. Every action is Ctrl-modified, because bare letters go to the filter. ProjectMan.exe is the same data as a desktop dashboard, and both read and write the same settings from one shared description of the editable surface, so adding a setting adds it to both.

Where a launch lands depends on one thing: whether Docked Console is installed. With it, sessions go into a column of the dock and the list stays up. Without it, the console hands over the terminal you are sitting in and the desktop app opens a new window.

It never runs wt to do that. It asks the dock and the dock splits itself, because Windows Terminal keeps elevated and unelevated windows in separate worlds, and aiming at the wrong one does not fail cleanly: it makes a new window that permanently steals the name.

Outstanding Work

What counts as something to do.

Git state
Uncommitted changes, unpushed commits, stashes, and branches with no upstream. Branch, upstream, ahead and behind counts, staged, unstaged, untracked, conflicted, and the last commit.
Open pull requests and issues
Fetched with gh and cached, so a sweep of a large tree does not turn into a rate-limit conversation.
Unchecked boxes
Any - [ ] left in markdown anywhere in the project. Plans you wrote and did not finish are work, whether or not a tracker knows about them.
Unfinished sessions
The title and last prompt of a Claude Code session that stopped mid-thought, so picking a project back up starts from what it was actually doing.
Dispatch

Work several repositories in one pass.

When work is outstanding in several places at once, dispatch lists every item as a checklist. Tick what you want worked and one session runs with each selected repository passed in and a briefing of what is outstanding where. Selection is per item rather than per repository, so one repo can contribute some of its work and not the rest.

The run happens inside ProjectMan, not in a terminal. The session's event stream is rendered as it arrives: what it says, one line per tool call, and any error a tool returned. The run ends with a summary of how long it took, how many turns, and what it cost, and a session signed in on a subscription says so rather than quoting an API bill it never incurred.

General instructions scope a run to one job across the selected repositories instead of working the items as found, which is how "rename every default branch to main" or "bring the docs up to the current code" becomes one pass rather than eleven. Preview shows the whole briefing before anything launches, exactly as the session receives it.

Autonomy

One ladder, governing both paths.

Each rung contains the ones below it, and it drives both the flags a session launches with and what a dispatch briefing permits, so the two can never contradict each other. commit is the default.

suggest
Read and report. Changes nothing, and asks before every tool.
write
Edit the working tree. Every change stays visible in git diff.
commit
Edit and commit. Nothing leaves the machine, and git reset undoes it.
push
Commit and push a branch. Work leaves the machine.
full
Push and open pull requests. Reviewable, but public.
Commands

From a shell.

pm                          # browse and launch
pm ls [--dirty] [--repos] [--sort recent|name|dirty|open] [--json]
pm status <name>            # one project in detail
pm go <name> [-c|-r] [--window]
pm open <name> [--window]   # a plain shell there
pm items [--json]           # every outstanding item across the tree
pm dispatch [--all] [--dry-run] [-i "<instructions>"]
pm doctor                   # resolve git, claude and wt, and time a sweep

A name matches on exact name, then unique prefix, then unique substring, and a repository inside a container directory is qualified by it, so two checkouts of similar things stay distinguishable.

Also In The Box

An MCP server that only reports.

A second product ships from the same repository as its own installer: a stdio MCP server exposing exactly one tool, get-projects, which returns every project under the root with its git state and open work as one JSON object.

It reports and nothing else. No launching, no dispatching, no writing, and it never creates a config. That last part is why it requires ProjectMan: it reads the same settings file to learn the projects root, and without one there is nothing to report on. Its installer checks and refuses rather than guessing a root.

Requirements

What it needs.

Required
Windows 11 and git on PATH.
Optional
claude for launching, gh for pull requests and issues, Windows Terminal for the desktop front end, and Docked Console 0.4.0 or newer for dock launches. Each is optional and only that feature is unavailable without it.
Configuration
A TOML file in local app data, written on first run, with a copy beside the executable taking precedence so a portable checkout can carry its own. Unknown keys are rejected, and a file that fails to parse is reported with its line number and left alone rather than overwritten.
Status

Not publicly available.

ProjectMan is an internal Locke Werks tool. The source is private and there is no public download.

For access, licensing, or a conversation about running something like this over your own tree, write to archon@lockewerks.com.