Project Memory CLI
Developer context in your terminal — a Python CLI client for projectmemory.app.
Installation
pip install projectmemory-cli
Or from source:
git clone https://github.com/your-org/projectmemory-cli
cd projectmemory-cli
pip install -e ".[dev]"
Both pm and projectmemory are registered as executable names.
Quick Start
# Authenticate (opens browser)
pm login
# Create a project and start its first session
pm project create
# Or resume an existing project/session
pm resume "My App"
# See your current context
pm memory show
# Work with tasks
pm task list
pm task add "Implement login"
pm task done 42 # completes task, then optionally links a commit
pm done # interactive task completion shortcut
# Capture notes
pm capture "Don't forget to update the Stripe webhook URL"
# Report an issue
pm issue add "Login fails on mobile Safari"
# End your session with the shared backend review
pm session end
Commands
Authentication
| Command | Description |
|---|---|
pm login |
Authenticate via browser |
pm logout |
Revoke token |
pm whoami |
Show current user |
pm auth status |
Check auth status |
pm doctor |
Diagnose CLI config, auth, backend, project, session, and Git state |
Projects
| Command | Description |
|---|---|
pm project list |
List all projects |
pm project create |
Create a project (interactive) |
pm project current |
Show current project + session |
pm project link |
Link this directory to a project |
pm project unlink |
Remove directory mapping |
pm web |
Open project in browser |
Work Sessions
| Command | Description |
|---|---|
pm resume [project] |
Start or resume a session |
pm session status |
Show all active sessions |
pm session end |
End the current session |
Project Memory
| Command | Description |
|---|---|
pm memory show |
Display all memory fields |
pm memory status set [text] |
Update Current Status |
pm memory context set [text] |
Update Important Context |
pm memory update |
Interactive memory update, including open issues |
Next Action
| Command | Description |
|---|---|
pm next |
Show current Next Action |
pm next set [text] |
Set Next Action (interactive menu) |
pm next task <id> |
Link a task as Next Action |
pm next issue <id> |
Link an issue as Next Action |
pm next clear |
Clear Next Action |
Tasks
| Command | Description |
|---|---|
pm task list |
List tasks; supports --open, --completed, --snoozed, --all |
pm task add [title] |
Create a task |
pm task done <id> |
Complete task + optional commit link |
pm done |
Interactive task completion shortcut |
pm task snooze <id> |
Snooze task |
pm task reopen <id> |
Reopen task |
pm task edit <id> |
Edit task |
pm task delete <id> |
Delete task |
Notes
| Command | Description |
|---|---|
pm note list |
List notes |
pm note add [content] |
Create a note; supports --title, --editor, --stdin |
pm note search <query> |
Search notes |
pm capture [text] |
Quick note shortcut |
pm note edit <id> |
Edit a note |
pm note delete <id> |
Delete a note |
Issues
| Command | Description |
|---|---|
pm issue list |
List issues; supports --open, --resolved, --all |
pm issue add [description] |
Report an issue |
pm issue resolve <id> |
Mark issue as resolved |
pm issue reopen <id> |
Reopen issue |
pm issue edit <id> |
Edit issue |
pm issue delete <id> |
Delete issue |
Commits
| Command | Description |
|---|---|
pm commit link |
Interactive recovery flow for linking a commit to a completed task |
pm commit link HEAD --task 24 |
Directly link a commit/ref to a completed task |
Configuration
Configuration is stored at ~/.config/projectmemory/config.toml.
The default api_url is the Project Memory site root, for example https://projectmemory.app. The CLI adds API paths such as /api/cli/... internally.
pm config show # show all settings
pm config set api_url https://your-instance.example.com
pm config reset # restore defaults
Environment variables
| Variable | Description |
|---|---|
PROJECTMEMORY_API_URL |
API base URL |
PROJECTMEMORY_TOKEN |
Token override (skip keyring) |
PROJECTMEMORY_PROJECT |
Current project ID override |
PROJECTMEMORY_NO_COLOR |
Disable color output |
Diagnostics
Run a read-only diagnostic report when troubleshooting local configuration or support issues:
pm doctor
pm doctor --json
pm doctor --verbose
pm doctor --no-network
pm doctor never prints authentication tokens, refresh tokens, passwords, private keys, or OAuth secrets. It exits with 0 when healthy, 1 when warnings are present, and 2 when critical issues prevent normal CLI use.
Directory Linking
Link the current git repository to a project so pm knows which project to use automatically:
cd ~/code/my-app
pm project link "My App"
# Now pm commands in this directory use "My App" automatically
pm task list # no --project needed
How Sessions Work
The CLI shares the session model with the web app. Sessions must be active for write operations (creating tasks, notes, issues, updating memory).
pm resumestarts or resumes the backend session for the selected projectpm resumecan offer an optional Smart Resume when meaningful work changed while you were away; generation always requires confirmation and uses 1 AI Assistpm session endshows the shared factual Session Review and finalizes that exact session- After finalization, the deterministic Project Memory Review may offer an optional Smart Handoff draft; generation and every regeneration require confirmation and use 1 AI Assist
- Smart Resume is informational. Smart Handoff remains a draft until you explicitly publish selected fields through the shared Project Memory service
- If the web app ends your session, the CLI will show a clear error and ask you to
pm resumeagain - A user can have active sessions in multiple projects, but the CLI has one current project
- Switching projects can end the current project session, keep it active, or cancel
The Web app and CLI use the same backend sessions, review snapshots, Project Memory operations, permissions, and AI Assist accounting. Presentation differs, but saved outcomes stay synchronized.
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=projectmemory_cli --cov-report=term-missing
# Lint
ruff check projectmemory_cli/
# Type check
mypy projectmemory_cli/
Security
- Tokens are stored in the OS keyring (or
~/.config/projectmemory/credentials.jsonwithchmod 600as fallback) - Passwords are never stored
- The
PROJECTMEMORY_TOKENenvironment variable overrides stored credentials (read-only) - Tokens can be revoked remotely via
pm logoutor from the web app at projectmemory.app/settings
project_memory_cli
Release files for projectmemory-cli 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| projectmemory_cli-0.1.3.tar.gz | 43.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| projectmemory_cli-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 98.1 kB
Release files / projectmemory_cli-0.1.3.tar.gz
| Download URL | projectmemory_cli-0.1.3.tar.gz |
|---|---|
| Size | 43.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cc6b01d9aabc538ecb5472022d8f873ea3a65bda18742ec514d2f797cea612fe
|
|
BLAKE2b-256 checksum How to use checksums |
da72b9310fa0438d3d078488f16d56ac79f0d2dc9909b5a5d9afbb7b92fa48e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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 24, 2026.
Transparency logRelease files / projectmemory_cli-0.1.3-py3-none-any.whl
| Download URL | projectmemory_cli-0.1.3-py3-none-any.whl |
|---|---|
| Size | 54.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
43944a8df44b4070ded7e54073211c1670cb56c0b253fee491aabe3b01346024
|
|
BLAKE2b-256 checksum How to use checksums |
91e53b29dc78a4c13ab7b5f37e26c8b7689536ef7afae08b21283c97fd5a3648
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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 24, 2026.
Transparency log