npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

boringpm

v0.1.5

Published

Project manager CLI for scripts, automation, and agent workflows

Readme

boringpm CLI

Project manager CLI for scripts, automation, and agent workflows.

Install

npm i -g boringpm

Command

When installed globally, use:

  • boringpm

If you're running from source in this repo, use npm run dev -- <command> from cli/.

By default, boringpm uses https://boringpm.onrender.com as the API URL. You can override it with PM_API_URL or --api-url.

Login UX (recommended)

Interactive login with persisted token:

boringpm login
boringpm whoami
boringpm project list
boringpm logout

This stores auth session data in:

  • ~/.projectmanager/auth.json

Project reference behavior

Commands that target a project accept either:

  • project ID
  • project name (case-insensitive exact match)

If multiple projects have the same name, use the project ID.

Team management examples

# Create and manage teams
boringpm team create "Engineering Team"
boringpm team list
boringpm team view <team-id>
boringpm team update <team-id> --name "New Team Name"

# Add and remove team members (owner only)
boringpm team add-member <team-id> <user-id>
boringpm team remove-member <team-id> <user-id>

# List projects in a team
boringpm team projects <team-id>

# Delete team (owner only, blocked if projects exist)
boringpm team delete <team-id>

Project management examples

# Create project (optionally linked to team)
boringpm project create "My Project"
boringpm project create "Team Project" --team <team-id>

# View projects
boringpm project list
boringpm project view minigta

Single-entity view examples

boringpm plan view <plan-id>
boringpm task view <task-id>

Spec-first workflow examples

# Create and approve spec first
boringpm plan create minigta "Auth hardening spec" --content "..."
boringpm plan approve <plan-id>

# Create task linked to approved spec
boringpm task create minigta "Implement auth guard" --plan <plan-id>

Agent workflow examples

# See only tasks assigned to you in one project
boringpm task list minigta --mine

# See your tasks across all visible projects
boringpm task mine --status in_progress

# Claim a specific task
boringpm task claim <task-id>

# Claim the next pending task in the project
boringpm task next minigta

# Add test scenarios and record results
boringpm task test-add minigta <task-id> "happy path" --steps "..." --expected "..."
boringpm task tests minigta <task-id>
boringpm task test-result minigta <task-id> <scenario-id> pass --evidence "CI run #123"

# Move task to testing, then complete with note
boringpm task move <task-id> testing
boringpm task done <task-id> --note "Implemented endpoint + tests"

# Forced completion requires waiver metadata
boringpm task done <task-id> --force --waiver-reason "prod incident" --approved-by lead-user-id

# Release assignment (defaults to pending when in_progress/testing)
boringpm task release <task-id>

# Add or read task comments
boringpm task comment minigta <task-id> "started implementation"
boringpm task comments minigta <task-id>

# Legacy alias (also clears assignee)
boringpm task unclaim <task-id>

# Delete commands prompt for confirmation by default
boringpm task delete <task-id>
boringpm plan delete <plan-id>

# Use --force / -f for non-interactive runs
boringpm task delete <task-id> --force
boringpm plan delete <plan-id> -f

Completion gate

task done is server-enforced and succeeds only when:

  • task status is testing
  • linked spec plan is approved
  • at least one test scenario exists
  • every test scenario has status=pass

Use --force --waiver-reason --approved-by only for audited exceptions.

Non-interactive auth options

1) Environment token

export PM_AUTH_TOKEN=<token>

2) Per-command token

boringpm --token <token> project list

3) Raw auth endpoints

boringpm auth send-link [email protected]
boringpm auth verify [email protected] <code>
boringpm auth me --token <token>