# pma
Maintenance across many repositories from one place.
Status: stages 1 and 2 of the [design](docs/dev/design.md): lint, scan, matrix and
health. Agent dispatch is not built yet.
## Install
```sh
cargo install pma
```
From a clone: `make install`.
Requirements:
- macOS or Linux. The database location is derived from `HOME`.
- Rust 1.88 or later, and a C compiler: SQLite is compiled in.
- `git` on `PATH`.
- `gh`, authenticated, for CI status. Without it, CI is recorded as unknown and
left out of health; `pma scan --offline` skips GitHub on purpose.
## TODO.md format
```markdown
# TODO
## Critical
- [ ] segfault on empty input #bug gh:42
## High
- [ ] support ggml 0.9 due:2026-10-01
## Medium
## Low
## Done
- [x] drop python 3.9
```
The section gives the priority. 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](docs/dev/design.md#todomd-format-v1).
## Commands
```sh
pma lint # ./TODO.md
pma lint ~/projects/*/ # every project; a directory means its TODO.md
```
Output is `path:line: severity: message`. Exit status is 1 when any file has an
error or cannot be read. Warnings alone exit 0.
```sh
pma root add ~/projects/ # git repos directly under it are projects
pma tier cyllama 1 # 1 (most important) to 5, or none
pma scan # TODO.md, git state, CI via gh; about 15s for 95 repos
pma scan --offline cyllama # one project, without GitHub
pma matrix # tiered projects' tasks in the Eisenhower matrix
pma matrix -q q1 --all
pma status --explain # projects by health, with each signal's share
pma config # every setting; `pma config tiers.2 0.7`, `--reset`
```
`matrix` and `status` read the last scan; they do not rescan. Only tiered
projects appear in them.
The database is `~/.config/pma/projects.db`, or `$PMA_HOME/projects.db`.
Dates are compared as UTC calendar days.
## Development
```sh
make test # cargo test, then pytest on scripts/
make check # fmt check, clippy -D warnings, test
```