Skip to main content

ppm CLI — your hosted project manager (Slack bot + daily digests)

Project description

ppm

ppm — your project manager

A hosted PM agent for your projects. It sweeps GitHub, Linear, and your coding sessions, measures activity against the goals you set per project, and:

  • DMs you a daily digest every weekday morning — what moved, what's blocked, what needs your attention, what drifted
  • keeps an always-current status rollup (Slack App Home, ppm status)
  • triages anything unmapped — assigned issues and new-work candidates land in an inbox you resolve by adopt or ignore, never silently dropped
  • lets you chat with it in Slack: "what needs my attention?", "put X on hold", "create a project for Y"

You own your projects' goals and lifecycle status; the agent only ever writes two fields per project (focus, last-activity) and suggests everything else.

Getting started

  1. DM the ppm bot in Slack — it creates your account, matches your Linear by email, and verifies your GitHub handle against the org.

  2. Connect this machine when it offers (or any time — DM "add a device"). Install the CLI with uv (the published command is ppm; the PyPI distribution is liquid-ppm):

    uv tool install liquid-ppm                                  # from PyPI
    uv tool install git+https://github.com/Liquid4All/ppm.git  # pre-publish, from git
    

    Then enroll the device:

    ppm login --code <code-from-slack>
    

    login enrolls the device, registers the Claude Code skill, and installs the session-pusher hooks. After that, each Claude Code session on this machine uploads a capped slice of its raw transcript (the most recent ~10 MiB, plus a short extract: first prompt + summaries) to your own scope in the hosted service over the authenticated API — no cloud credentials live on your machine, only the device token. That transcript text is what feeds your digest. The bot pings you in Slack the moment the device connects, with project suggestions drawn from your repos, Linear, and sessions.

  3. Confirm your projects in the DM (it proposes; you decide), give each a couple of sentences of goal — that's the yardstick the digest measures against — and ask for a test digest.

CLI

ppm status                    current rollup
ppm digest [YYYY-MM-DD]       digest markdown
ppm projects list|show|set    manage projects (set: --status, --watch)
ppm projects create --name X --repos org/a,org/b --linear "Team (owner)" --goal "..."
ppm projects note <name> <t>  append a dated note to a goal body
ppm projects link <name> <mapping> [--owner]
ppm linear                    Linear teams/projects available for linking
ppm triage [adopt|ignore <id>]
ppm devices [add|revoke <id>]
ppm import <PROJECTS.md> [--commit]   migrate a markdown project list
ppm review                    pull digest+status, open Claude Code over them
ppm update                    self-update (uv tool upgrade liquid-ppm)
ppm instructions              full reference (agents: run this first)

login also registers a ppm skill in Claude Code, so any local Claude session can read and act on your projects through the same API the Slack bot uses — one write contract everywhere.

How it works

  • Backend (Liquid4All/ppm-backend): FastAPI on Fly, Neon Postgres (identity, projects, runs), Tigris S3 (immutable activity snapshots, digests, transcripts). A daily pipeline fetches org activity once, then runs each user's digest agent (Claude, narrow buffered-write tools, validators before publish). Every agent action is audit-logged with a retained transcript.
  • This repo: the zero-dependency Python CLI + session pusher (uv tool install liquid-ppm). The full system design lives in HOSTED-DESIGN.md.
  • Trust model: your sessions and personal data stay in your own scope. The session pusher uploads a capped slice of raw transcript to your scope (see Getting started); the digest agent then references that work as project + one-line topic, and what's shared with teammates is never raw excerpts. Uploads go only to https://ppm-backend.fly.dev over HTTPS — the client refuses any other host unless you explicitly set PPM_ALLOW_INSECURE_API=1 for local dev. Team features (channel digests, publish-up progress sharing) are designed in HOSTED-DESIGN.md §5 and arrive next.

Support

Questions, ideas, bugs — @jbuchananr on Slack.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

liquid_ppm-0.3.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

liquid_ppm-0.3.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file liquid_ppm-0.3.0.tar.gz.

File metadata

  • Download URL: liquid_ppm-0.3.0.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for liquid_ppm-0.3.0.tar.gz
Algorithm Hash digest
SHA256 a1725d91fc96718e89ee1fe34c98d1d5f6a2b2042dcc4e765beb37b8fa1b7cab
MD5 5fccc8c45f6a0b9c4c5e5cd3ad5207db
BLAKE2b-256 2e27690902cca54f9c2ead1393dbbeb5351a15f06696fd7f9dcc583cb49a03b5

See more details on using hashes here.

File details

Details for the file liquid_ppm-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: liquid_ppm-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for liquid_ppm-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d0827bcd247811ef36abfc034fb6d813845f695185277791bd97b8aefcb3172
MD5 e6b58cd60913fb2caeaf94643291b461
BLAKE2b-256 8a0d1eefa54e4d911fd0670900a932d2363e95c6f96cb3dd30de517c84cea02b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page