MIT License Node.js 20+ git-native agent-optimized 11 item types TOON format v2026.8.10 93 actions

Project management
that lives in your repo

git-native project management for humans and AI agents β€” zero config, append-only audit log, token-efficient TOON output, 9 extension capabilities, fully extensible.

$
$ npm install -g @unbrained/pm-cli
Quick start

Up and running in 30 seconds

Four commands. That's all it takes to install pm-cli and start tracking your first task.

$ npm install -g @unbrained/pm-cli
added 1 package, audited 1 package in 3s
$ pm init
βœ“ initialized .agents/pm/ β€” ready to track work
$ pm create --type Task --title "My first task"
id: pm-tsk-abc123 type: Task status: open
$ pm list
pm-tsk-abc123 β”‚ Task β”‚ open β”‚ My first task
$
Full quickstart guide Browse all 119 commands
Lifecycle

Six statuses, deterministic transitions

Every item follows the same lifecycle. Agents and humans share a predictable state machine with full audit trail.

draft
open
in_progress
blocked
closed
canceled

start-task claims + moves to in_progress Β· pause-task releases + returns to open Β· close-task closes + releases claim

Features

Everything you need, nothing you don't

Designed for the way modern teams β€” and their AI agents β€” actually work. 11 item types, 10 command families, 9 extension capabilities.

🌿

Git-native storage

Items live in .agents/pm/ right inside your repository. Review, diff, and merge project items just like code. No external database.

.agents/pm/
πŸ€–

Agent-optimized TOON output

TOON format emits only changed fields β€” sparse, token-efficient output that keeps LLM context windows lean while staying fully machine-readable.

TOON format
πŸ“‹

Append-only JSONL history

Every mutation is recorded in a JSONL audit log with RFC6902 patches, content hashes, and full provenance from creation to close.

RFC6902 patches
πŸ”Œ

9 extension capabilities

commands, renderers, hooks, schema, importers, search, parser, preflight, services. Ship your own with the extension lifecycle manager.

extensible
⚑

Zero-config start

One command β€” pm init β€” sets up everything with smart defaults. Start tracking work in under ten seconds.

pm init
πŸ”

Hybrid search

Keyword search always available. Add semantic or hybrid search with OpenAI-compatible or Ollama providers plus Qdrant or LanceDB vector stores.

semantic search
πŸ§ͺ

Linked tests & verification

Bind test commands to work items with assertion metadata. Run with pm test --run, track results in history, background test runs, sandbox-safe testing.

pm test
πŸ“…

Time-aware planning

Built-in Events, Reminders, Milestones, and Meetings keep schedule metadata next to your work. Filter and inspect them through the current list, search, context, and item-detail commands.

events / reminders
πŸ”’

Claim / Release lifecycle

Claim items to prevent double-work. Use start-task, pause-task, and close-task aliases for safe state transitions.

pm claim / release
πŸ”—

Rich metadata model

Rich metadata for sprint, release, estimate, risk, confidence, acceptance criteria, definition of ready, blocked-by, severity, and more.

metadata-rich
πŸ”„

Bulk operations

Update many items at once with pm update-many. Dry-run plans and rollback checkpoints keep broad changes reviewable.

update-many
🌐

Machine contracts

Machine-readable contracts via pm contracts --json. Custom item types via config and extensions.

JSON schema
Item Types

11 built-in item types

Plus custom types via config and extensions. Each type has its own option policies β€” required fields, disabled fields, and smart defaults.

πŸ”§ Chore
βš–οΈ Decision
πŸ”οΈ Epic
πŸŽͺ Event
✨ Feature
πŸ› Issue
πŸ“… Meeting
🏁 Milestone
πŸ“ Plan
⏰ Reminder
βœ… Task

Custom types via pm config or extensions β€” define your own schemas, fields, and workflows.

Commands

119 commands, 10 logical families

From bootstrap to lifecycle, every command is designed for both humans and agents. Browse the full reference β†’

πŸš€

Bootstrap

config, extension, health, init, install, package, packages, schema, upgrade

πŸ”

Triage

aggregate, context, ctx, get, list, list-all, list-blocked, list-canceled, list-closed, list-draft, list-in-progress, list-open, search

⚑

Lifecycle

append, claim, close, close-task, create, delete, pause-task, release, restore, start-task, update, update-many

πŸ“

Planning

plan

πŸ“

Logs

comments, learnings, notes

πŸ”—

Links

deps, docs, files

πŸ§ͺ

Verification

gc, test, test-all, validate

πŸ“œ

History

activity, history, stats

πŸ€–

Machines

contracts

βš™οΈ

Other

close-many, copy, duplicates, eval, event, events, extension activate, extension adopt, extension adopt-all, extension catalog, extension deactivate, extension describe, extension doctor, extension explore, extension init, extension install, extension manage, extension migrate, extension reload, extension uninstall, focus, graph, history-author-acknowledge, history-compact, history-redact, history-repair, item, item complete, item mutate, meet, merge, next, package activate, package adopt, package adopt-all, package catalog, package deactivate, package describe, package doctor, package explore, package init, package install, package manage, package migrate, package reload, package uninstall, packages activate, packages adopt, packages adopt-all, packages catalog, packages deactivate, packages describe, packages doctor, packages explore, packages init, packages install, packages manage, packages migrate, packages reload, packages uninstall, profile, remind, telemetry, workspace, workspace snapshot, workspace snapshot create, workspace snapshot delete, workspace snapshot inspect, workspace snapshot list, workspace snapshot restore

Interactive demo

See pm-cli in action

Click any tab to see a real workflow. Output animates line by line β€” just like your terminal.

Agent-optimized

What is TOON?

The Token-Optimized Object Notation emits only changed fields β€” a sparse, machine-readable format designed to keep LLM context windows lean.

Sparse, token-efficient output

Traditional JSON APIs return the full object on every read. TOON returns only the fields that changed β€” dramatically reducing token usage when agents are working in tight loops.

Built for agents

  • Progressive context β€” lean agent snapshots without broad list scans
  • Machine contracts β€” JSON Schema for every command
  • Append-only history β€” RFC6902 patches for state replay
  • Claim/Release β€” prevent double-work across agents
  • Background tests + sandbox mode
# After: pm create --title "Add SSO" --type Feature
id: pm-fea-7x9k2m
type: Feature
title: Add SSO
status: open
priority: 2
created: 2026-05-04T10:30:00Z
createdBy: agent

# After: pm update pm-fea-7x9k2m --status in_progress
id: pm-fea-7x9k2m
status: in_progress ← only changed field
updated: 2026-05-04T11:15:00Z

# History entry (JSONL)
{
  "op": "update",
  "id": "pm-fea-7x9k2m",
  "patch": [
    {"op":"replace","path":"/status","value":"in_progress"}
  ],
  "ts": "2026-05-04T11:15:00Z"
}
Use cases

Built for every workflow

Whether you're a solo dev, a team lead, an AI agent, or an open-source maintainer β€” pm-cli adapts to how you work.

πŸ‘¨β€πŸ’»

Solo developer

Personal project tracking

Track todos, features, and bugs alongside your code. No overhead, no sync issues β€” everything lives in git.

pm init pm create --title "Add auth flow" --type Feature --priority 1 pm start-task auth-01 pm close-task auth-01 "Auth shipped with tests"
πŸ€–

AI coding agent

Autonomous task execution

Agents use TOON output and JSON contracts for deterministic, token-efficient project management in tight loops.

pm context --depth brief --json pm claim bug-42 pm test-all --json | jq '.ok' pm close-task bug-42 "Fixed: added null check"
πŸ‘₯

Team sprint

Collaborative planning

Use the software-sprint preset for sprint-based workflows with claim/release, linked files, and structured reviews.

pm init bash presets/software-sprint/setup.sh pm create --type Task --sprint S3 --estimate 120 --assignee alice pm list-all --sprint S3 pm stats
🌐

Open-source maintainer

Issue triage & releases

Import GitHub issues, triage with search and aggregation, track milestones, and manage releases β€” all from the CLI.

pm install npm:pm-github pm search regression auth pm create --type Milestone --title "v2.0 Release" pm aggregate --group-by type
Latest release

What's new in v2026.8.10

Generated from the current pm CLI changelog. v2026.8.10 (2026-08-10) includes 29 tracked changes across Added, Fixed, Other.

See full changelog β†’

✨

Added

  • GH-472: create error for missing required custom fields lists the field names (pm-4bzq)
  • Provenance records distinguish unavailable configuration from resolver failures (pm-lu6sca)
v2026.8.10 Β· 2026-08-10
πŸ› οΈ

Fixed

  • GH-959 recurrence: snapshot restore planning races lease-expiry fixture cleanup (pm-usq49n)
  • GH-960: structured diagnostic notices preserve machine-readable JSON envelopes (pm-embm6t)
  • GH-956: lossless acceptance-criteria replacement and unmatched-removal failure contract (pm-lppm6y)
  • GH-954: fail-fast dependency target validation with explicit forward-reference intent (pm-x3dq0l)

+21 more in the changelog

v2026.8.10 Β· 2026-08-10
πŸ“¦

Other

  • Refresh pinned GitHub Actions for PR #958 with exact-head compatibility proof (pm-obh6lo)
  • The measurement ratchet floors only aggregate graph totals, so converting typed semantic edges to untyped ones passes every declaration (pm-70jyvw)
v2026.8.10 Β· 2026-08-10
Why pm-cli

Not another project management tool

pm-cli is fundamentally different from SaaS tools. Your data is yours, your workflow is in git, and agents are first-class citizens.

pm-cliJiraLinearNotion
Lives in git repoβœ“βœ—βœ—βœ—
Agent-optimized output (TOON)βœ“βœ—βœ—βœ—
Offline-firstβœ“βœ—βœ—βœ—
Append-only audit log (RFC6902)βœ“PartialPartialβœ—
Zero configβœ“βœ—βœ—βœ—
Free & open sourceβœ“βœ—βœ—βœ—
CI/CD integrationβœ“APIAPIAPI
Extensible plugins (9 cap types)βœ“Marketplaceβœ—βœ—
Linked test executionβœ“βœ—βœ—βœ—
Calendar & schedulingβœ“βœ“Partialβœ—
Semantic / hybrid searchβœ“βœ—βœ—βœ—
Machine-readable contractsβœ“βœ—βœ—βœ—
Bulk operations with rollbackβœ“βœ—βœ—βœ—
Token-efficient output formatβœ“βœ—βœ—βœ—
Presets

Pre-configured PM workspaces

Drop a preset into any initialized project for the right settings, templates, and governance rules.

Package Store

Ready-to-install pm packages

33 official and community packages: the web app, graph sync, importers, renderers, integrations, scaffolds, and preconfigured workspace presets.

pm-beads official

Beads JSONL importer extension for pm-cli

commandsimportersschema
pm-brief official

Token-budgeted agent briefs and next-work plans for pm workspaces

commandsrenderersschema
pm-calendar official

Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.

commands
pm-changelog official

Generate CHANGELOG.md and release notes from completed pm items for local releases, GitHub Actions, runners, and scripts. Can run as a standalone CLI/API package or as `pm changelog generate`.

commandsimportersrenderersschema
Get started

Up and running in seconds

Install globally, initialize any repo, start tracking. That's it. Works with any language, any stack, any team size.