pma
Maintenance across many repositories from one place.
Status: every stage of the design: lint, scan, matrix, health, agent dispatch with review and ship, Issues sync, notes, the deps signal, and a TUI. claude is the only agent.
Install
From a clone: make install.
Requirements:
-
macOS or Linux. The database location is derived from
HOME. -
Rust 1.89 or later, and a C compiler: SQLite is compiled in.
-
gitonPATH. -
gh, authenticated, for CI status. Without it, CI is recorded as unknown and left out of health;pma scan --offlineskips GitHub on purpose. Also for fix-CI dispatch,publish = pr, andpma sync. -
claude, logged in, forpma dispatch.
TODO.md format
-
-
-
The section gives the priority. A finished item is ticked where it stands; pma prune removes finished items. A ### heading inside a section groups the items below it. Trailing #tag, due:YYYY-MM-DD and gh:N (a linked issue) are optional. The full rules are in the design.
Commands
Output is path:line: severity: message. Exit status is 1 when any file has an error or cannot be read. Warnings alone exit 0.
matrix and status read the last scan; they do not rescan. Only tiered projects appear in them.
A target that names one task fails when that task cannot run. One that names many passes each over with its reason and dispatches the rest. -a and -m outrank pma config agent, pma config model and any applied route; without -m the agent picks its own model, and pma config model applies only to the agent it was set alongside.
Each run gets a worktree of the remote default branch under ~/.config/pma/worktrees, so a dirty clone is never touched. The agent runs without push credentials. pma then runs the project's tests itself: set the command with pma config projects.cynn.verify "make check", or let it be detected. Limits: max_parallel, batch_budget, agent_budget, timeout. publish is pr by default; pma config publish push pushes to the default branch instead. A run shipped as a PR stays pr-open until the PR is merged or closed, and its task is not dispatched again meanwhile.
dispatch, ship, and review --reject or --rework hold a lock on session.lock, so only one of them runs at a time; an open task list holds it too. Other commands, including pma review to watch a batch, can run alongside. The agent may edit files and run the verify command; other shell commands are denied unless your Claude Code settings allow them. pma ship resumes after a failure without publishing twice.
Each ## Critical item gets an issue labelled pma:critical, and gh:N is written into its line. An item whose issue is closed is ticked. TODO.md edits are left uncommitted; scripts/commit_todo.py commits them.
The database is ~/.config/pma/projects.db, or $PMA_HOME/projects.db. Dates are compared as UTC calendar days.
Development