PM-Agent
Stateful Technical PM Agent — a CLI tool that brings persistent project-management context to AI-assisted development. Each project gets its own configuration, memory, decision log, and action audit trail in a local SQLite database.
Status
Alpha — under active development. The CLI is stable for daily use; the schema and API may change before a 1.0 release.
Key Concepts
my-project/
.pm-agent/ ← created by `pm-agent init`
project.toml ← machine-readable project config (commit this)
memory.md ← human-editable notes (commit this)
state.db ← SQLite state DB (gitignored, auto-created)
logs/ ← action error logs (gitignored)
Project Discovery
pm-agent walks up from your current directory looking for .pm-agent/. If
found, that directory becomes the project root. If not found, it looks for a
.git directory as a fallback. This means:
- Run
pm-agent statusfrom any subdirectory of your project. - Pass
--project-root /pathto pin an exact root (bypasses discovery). - Pass
--repo /pathto set a different starting point for discovery.
Commands
| Command | Description |
|---|---|
pm-agent init |
Initialize .pm-agent/ in the current repo |
pm-agent / pm-agent repl |
Start the interactive REPL |
pm-agent status |
Show project state and active config |
pm-agent doctor |
Check environment, config, and permissions |
pm-agent spec show |
Display the project specification |
pm-agent memory show |
Display project memory |
pm-agent memory add <text> |
Append a dated memory entry |
pm-agent migrate |
Import legacy global DB into .pm-agent/state.db |
Installation
Requires Python 3.12+ and an OpenAI-compatible chat endpoint (Ollama, OpenAI, or any compatible API).
Quick install (recommended)
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/sm-me-dev/pm-agent/main/scripts/install.sh | bash
To pin a version:
PM_AGENT_VERSION=0.3.0 curl -fsSL https://raw.githubusercontent.com/sm-me-dev/pm-agent/main/scripts/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/sm-me-dev/pm-agent/main/scripts/install.ps1 | iex
To pin a version:
$env:PM_AGENT_VERSION = "0.3.0"; irm https://raw.githubusercontent.com/sm-me-dev/pm-agent/main/scripts/install.ps1 | iex
Security note: piping from the web to your shell is convenient but skips normal verification. Review the script before running:
The installer detects or installs pipx and
uses it to install pm-agent into an isolated environment.
pipx (any platform)
pipx install product-manager-agent
From source
git clone https://github.com/sm-me-dev/pm-agent.git
cd pm-agent
pip install -e ".[dev]"
Verify
pm-agent --help
Quickstart
cd /path/to/your/repo
pm-agent init # creates .pm-agent/
pm-agent # starts the REPL
pm-agent status # inspect project state
pm-agent doctor # run diagnostics
pm-agent migrate # import legacy data if you used pm-agent before v0.3
Configuration Precedence
- CLI flags (
--model,--db,--repo, etc.) - Environment variables (
PM_AGENT_*) .pm-agent/project.toml(per-project)~/.config/pm-agent/config.toml(user-global)- Built-in defaults
Key Environment Variables
| Variable | Default | Description |
|---|---|---|
PM_AGENT_MODEL |
glm-5.2 |
Model name |
PM_AGENT_BASE_URL |
http://localhost:11434/v1 |
API endpoint |
PM_AGENT_API_KEY |
— | API key |
PM_AGENT_HISTORY_LIMIT |
75 |
Messages in context window |
PM_AGENT_ALWAYS_APPROVE |
false |
Auto-approve all actions |
Project Config (project.toml)
[project]
name = "my-project"
language = "python"
test_command = "pytest"
lint_command = "ruff check"
build_command = ""
[constraints]
allowed_paths = []
approval_default = "prompt"
blocked_actions = []
[paths]
# context_dir = ""
# error_log_path = ""
Migration from Legacy Global DB
If you previously used pm-agent with a global state database at
~/.local/share/pm-agent/state.db, migrate to project-local storage:
cd /path/to/your/repo
pm-agent init # one-time setup
pm-agent migrate # copy existing data into .pm-agent/state.db
The migration is idempotent — running it multiple times is safe.
Safety
- Repository access is read-only by default.
- External actions require per-payload approval (configurable via rules).
- All actions are logged with an immutable audit trail.
Development
git clone https://github.com/sm-me-dev/pm-agent.git
cd pm-agent
pip install -e ".[dev]"
pytest
See CONTRIBUTING.md for full development workflow.
Release
See RELEASE.md for the release process.
License
MIT
Metadata
Release files for product-manager-agent 0.3.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| product_manager_agent-0.3.12.tar.gz | 92.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| product_manager_agent-0.3.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 198.6 kB
Release files / product_manager_agent-0.3.12.tar.gz
| Download URL | product_manager_agent-0.3.12.tar.gz |
|---|---|
| Size | 92.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c70af2fe43725e5c148fcb5047943246c604b23e8122231f08e2ab63fb9e8493
|
|
BLAKE2b-256 checksum How to use checksums |
2ea03a4441365ef60a2643c4cdab0010384b5956f556d4b392586d4c68b64afd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency logRelease files / product_manager_agent-0.3.12-py3-none-any.whl
| Download URL | product_manager_agent-0.3.12-py3-none-any.whl |
|---|---|
| Size | 105.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
af5c647987fdfb2fb3296bfbbf55338e0a814f6589377e39070c520d4622238a
|
|
BLAKE2b-256 checksum How to use checksums |
9a937b1c6edd184c5d66067a83f458b66c9376bac4eb90b456b1f71ef9f8e41d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency log