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

@dreki-gg/taskman

v0.3.1

Published

Standalone task-management engine + CLI over a .plans/ JSONL ledger — the plan-mode core, usable from any Node harness

Downloads

758

Readme

@dreki-gg/taskman

A standalone task-management engine — and a taskman CLI — over a plain .plans/ JSONL ledger. It is the core extracted from @dreki-gg/pi-plan-mode, so any harness (not just pi) can drive the same plans, initiatives, and tasks.

Why it exists

Planning agents need durable, file-based task state that survives across sessions and tools. taskman owns that state machine — task status, plan and initiative lifecycle, and the projection rules that keep them consistent — with no dependency on any specific agent harness. Use it from a shell, a CI job, a different agent, or as a library.

The ledger (the one durable contract)

Everything lives under .plans/ in the current working directory:

  • .plans/plans.jsonl — the plan registry.
  • .plans/initiatives.jsonl — the initiative registry (initiatives group plans).
  • .plans/<plan>/tasks.jsonl — one plan's task list (first line is metadata).
  • .plans/<plan>/HANDOFF.md, .plans/<initiative>/INITIATIVE.md — prose docs.

Three invariants are worth knowing; everything else is mechanism:

  1. Status is a projection, not a flag. A plan is done when its active tasks are all resolved (and no follow-ups remain); an initiative is done when every member plan is terminal. Writing task state re-derives the registry — you do not set plan status by hand for the normal path.
  2. Plan resolution is stateless. A command targets a plan via --plan <name> (accepts .plans/<name> too), else the single in-progress plan. Ambiguous or missing → it exits non-zero and lists the candidates.
  3. Terminal statuses set manually are never auto-reverted. reconcile only moves in-progress ⇄ done; it never resurrects a superseded/abandoned plan or regresses a finished one.

Usage

taskman --help            # full, always-current command list
taskman <command> --help  # flags + arguments for one command

--help is the source of truth for commands and flags — this README does not duplicate it (so it cannot drift). Every command prints human text by default and accepts --json for machine consumption.

Create a plan from any harness (handoff/tasks accept an inline value, a --*-file <path>, or piped stdin):

echo "$MARKDOWN" | taskman create-plan --name my-plan --title "My Plan" \
  --handoff-file - --tasks '[{"description":"do it"}]'
taskman create-handoff --plan my-plan --file HANDOFF.md   # write/replace prose

A typical execution loop:

taskman status                       # what's the active plan and its tasks?
taskman update-task t-003 done       # mark progress (auto-reconciles the plan)
taskman add-task "handle empty case" --reason "found gap while implementing"
taskman reconcile --apply            # repair safe status drift

As a library

import { makePlanRuntime, resolvePlanByName, setTaskStatus } from '@dreki-gg/taskman';

const run = makePlanRuntime(); // bridges the Effect programs to the live filesystem
const { planDir } = await run(resolvePlanByName({ name: 'my-plan' }));
await run(setTaskStatus(planDir!, 't-001', 'done'));

The public surface (storage, schema, reconcile, initiative projection, resolution, and composite write flows) is exported from the package root. The engine is built on Effect with a single FileSystem seam, so it is straightforward to test and to run against an alternate backend.

Agent skill

This package ships a TanStack Intent skill (skills/taskman/core) — versioned guidance that AI coding agents discover from node_modules. If you use an AI agent, run:

npx @tanstack/intent@latest install

License

MIT