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

@rryter/knowhow

v0.3.0

Published

Claude Code skills, agents and hooks for a personal Staff/Principal engineering knowledge base: capture, weekly review, decision records, blog triage, skill forge.

Readme

knowhow

Personal knowledge base and Claude Code setup for growing toward Staff / Principal Engineer.

The loop: capture → review → decide → publish → automate.

| Step | Skill | Cadence | Output | |---|---|---|---| | Capture | /rryter:capture | after meaningful tasks | sanitized note in notes/, line in impact-log.md | | Review | /rryter:weekly-review | weekly, ~15 min | inbox processed, themes, blog scores updated | | Decide | /rryter:decision-record | after design choices | ADR in decisions/ | | Publish | /rryter:blog-triage | monthly | ranked ideas, one outline in blog/drafts/ | | Automate | /rryter:skill-forge | when something repeats | new skill in forged-skills/ | | Recall | /rryter:recall | whenever you need it | answer from your notes, with sources and gaps |

Two subagents support this: rryter:staff-reviewer (principal-engineer review of designs/PRs) and rryter:editor (turns drafts into publishable posts).

All of it ships as the Claude Code plugin rryter, so everything is namespaced: /rryter:<skill>, rryter:<agent>. Day-to-day usage: HOW-TO-USE.md.

Layout

.claude-plugin/
  plugin.json        # the "rryter" plugin
  marketplace.json   # "knowhow" marketplace, serving the plugin from this checkout
skills/          # the five skills above
agents/          # staff-reviewer, editor
hooks/
  hooks.json              # registers both hooks with the plugin
  log-session.sh          # SessionEnd: logs each session to inbox/sessions.md
  guard-confidential.sh   # PreToolUse: blocks writes to this repo containing client terms or patterns
  scan-confidential.pl    # the scanner, shared with the git pre-commit check
  pre-commit.sh           # installed into .git/hooks by the installer
  confidential-patterns.default  # seed for .confidential-patterns
forged-skills/   # skills made with /rryter:skill-forge, linked as plain user skills
scaffold/        # pristine seed files for npm-installed bases
templates/       # note, decision, post
inbox/           # raw captures (sessions.md is local only, gitignored)
notes/           # atomic, sanitized learnings
decisions/       # ADRs
blog/ideas.md    # scored backlog
blog/short-posts.md  # LinkedIn / X drafts from the weekly review
blog/drafts/
impact-log.md    # brag doc
skills-candidates.md
growth.md        # competencies practised this quarter
tags.md          # agreed tag vocabulary

Install

From npm (scaffolds a fresh knowledge base):

npx @rryter/knowhow install              # base in ~/knowhow
npx @rryter/knowhow install --dir ~/kb   # or anywhere else

From a checkout of this repo:

git clone [email protected]:rryter/knowhow.git ~/knowhow
cd ~/knowhow && ./install.sh

The skills and hooks address the base as ~/knowhow, so when it lives elsewhere the installer makes ~/knowhow a symlink to it (and refuses if ~/knowhow is already something else). It also:

  • creates the base folders, templates and seed files where missing; existing content is never overwritten. Git checkouts are never written to
  • registers the base as the knowhow plugin marketplace and installs rryter@knowhow. A checkout serves the plugin from itself; an npm-installed base fetches it from the @rryter/knowhow package
  • links forged-skills/* into ~/.claude/skills/
  • allows read-only access to the base from every project (Read(~/knowhow/**) in ~/.claude/settings.json), so /rryter:recall and rryter:staff-reviewer work in your work repos. Writes still prompt and go through the guard
  • removes the symlinks and settings.json hook entries left by pre-plugin installs (backing up settings.json first), and creates a local .confidential-terms file

Requires Node 20+, jq and the claude CLI.

To update: npx @rryter/knowhow@latest install for an npm-installed base, or git pull && ./install.sh for a checkout. Both find the base through ~/knowhow, so --dir is only needed the first time. Restart Claude Code afterwards.

Then add the snippet from ~/knowhow/global-CLAUDE.md to ~/.claude/CLAUDE.md.

Publishing

package.json files whitelists only the plugin manifest, skills, agents, hooks, templates and scaffold/ (pristine seed files). Your own notes, decisions, ideas and impact log are never packed. Check with npm pack --dry-run and claude plugin validate ., then npm publish. Keep version in package.json and .claude-plugin/plugin.json in sync.

Using it from a work repo

claude --add-dir ~/knowhow

The plugin is installed at user scope, so /rryter:capture works in any project.

Confidentiality

This repo must never contain client code, internal names, URLs, ticket IDs or data. Only generalized learnings.

  • Every skill that writes here has a mandatory sanitize step.
  • hooks/guard-confidential.sh blocks any write into this repo that contains a term from .confidential-terms (one per line, case-insensitive) or matches .confidential-patterns (one <label> <Perl regex> per line: ticket keys, internal hostnames, private IPs, email addresses, tokens). Both files are gitignored. Fill the terms with client names, internal hostnames, project codes. There is no override; reword instead.
  • A git pre-commit check runs the same scanner over staged changes, so nothing confidential reaches the remote even if it got in another way.
  • Keep the repo private.