Stateful Technical PM Agent — multi-project CLI with persistent per-project context
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file product_manager_agent-0.3.8.tar.gz.
File metadata
- Download URL: product_manager_agent-0.3.8.tar.gz
- Upload date:
- Size: 81.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3b33c84d21ca4b2da2b8b904079e39746ab0c47caeff2e53abe7c94493ddeda
|
|
| MD5 |
6749e71a1ed6fadfedadc96d2dd98f40
|
|
| BLAKE2b-256 |
f86bcdf25fac21a69c360b462f42fa69e80331bdd20de86d377747dc83727cea
|
Provenance
The following attestation bundles were made for product_manager_agent-0.3.8.tar.gz:
Publisher:
release.yml on sm-me-dev/pm-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
product_manager_agent-0.3.8.tar.gz -
Subject digest:
d3b33c84d21ca4b2da2b8b904079e39746ab0c47caeff2e53abe7c94493ddeda - Sigstore transparency entry: 2190560436
- Sigstore integration time:
-
Permalink:
sm-me-dev/pm-agent@8da4d7085a66541b9c2da9e10b4c11bee68c88a6 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/sm-me-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8da4d7085a66541b9c2da9e10b4c11bee68c88a6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file product_manager_agent-0.3.8-py3-none-any.whl.
File metadata
- Download URL: product_manager_agent-0.3.8-py3-none-any.whl
- Upload date:
- Size: 92.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5592db6e21f223580eceafe280fb0f25c80199a09a2ca83f154e20fd9db97b4e
|
|
| MD5 |
0ddd627181bf9a99183c351d7b4278df
|
|
| BLAKE2b-256 |
df572578549abcb2888136aec554b7b7f67d613d9dbd35376c6684cb9f794b6e
|
Provenance
The following attestation bundles were made for product_manager_agent-0.3.8-py3-none-any.whl:
Publisher:
release.yml on sm-me-dev/pm-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
product_manager_agent-0.3.8-py3-none-any.whl -
Subject digest:
5592db6e21f223580eceafe280fb0f25c80199a09a2ca83f154e20fd9db97b4e - Sigstore transparency entry: 2190560451
- Sigstore integration time:
-
Permalink:
sm-me-dev/pm-agent@8da4d7085a66541b9c2da9e10b4c11bee68c88a6 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/sm-me-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8da4d7085a66541b9c2da9e10b4c11bee68c88a6 -
Trigger Event:
push
-
Statement type: