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

@prowl-ai/brandbook

v1.9.0

Published

Prowl's brand system as an agent plugin — operator voice, terminology, canonical product facts, and the Editorial Luxury design system with machine-readable tokens.

Readme

Prowl Brandbook

npm validate plugin license

The Prowl brand, packaged as an agent plugin — and the working repo where brand, SMM and marketing output actually lives.

Two ways to use this repo; only one of them needs an install

| You are | What you do | What keeps you current | |---|---|---| | Working inside this repo — brand, SMM, marketing, launches | git pull, read NOW.md, put your work under workspace/ | Nothing. The app repo pushes the current product straight in: the numbers, what shipped, what still needs a human | | Working in another repo and want Prowl's voice and pixels there | Install the plugin (below) | claude plugin update prowl-brand@prowl-brand when the version moves |

NOW.md is the entry point for the first case — one page, rewritten on every product push: what Prowl is today, what shipped recently, what still needs a human, and where each kind of work goes. Nothing to install and no version to chase; the version bumps exist for the other audience.

Install it and any agent — Claude Code, Cursor, Codex — writes Prowl copy in Prowl's voice and builds Prowl visuals from Prowl's real tokens, without being told the rules each time.

Two skills:

| Skill | Job | |---|---| | prowl-brand | Every Prowl sentence — landing copy, UI strings, social, ads, docs, submissions — plus the canonical numbers, plan names, and boilerplate. | | prowl-design | Every Prowl pixel — colour, type, logo, components, motion — plus brand.json, prowl-brand.css, an HTML artifact template, and all logo variants. |

prowl-brand is also the entry point: invoke it with no task and it reports every open or conflicting fact and suggests one next action.

Install

From the repo

Private repo — you need read access and gh authenticated.

claude plugin marketplace add PROWL-AI/prowl-brandbook
claude plugin install prowl-brand@prowl-brand

From npm — no repo access needed

npm i -g @prowl-ai/brandbook
claude plugin marketplace add "$(npm root -g)/@prowl-ai/brandbook"
claude plugin install prowl-brand@prowl-brand

The package root carries its own marketplace.json, which is what makes marketplace add work on it. Verified end to end against the registry, not against a local checkout — npx and npm both resolve locally inside this repo and would give a false pass.

npx skills add @prowl-ai/brandbook does not work. The skills CLI reads that argument as a GitHub repo, not an npm package, and fails. For Cursor, Codex and the rest, point it at the repo instead:

npx --yes skills add PROWL-AI/prowl-brandbook --global

From a ZIP — no git, no network

For anyone without repo access. Build the archive:

python3 scripts/build-release.py

That writes dist/prowl-brand-<version>.zip (~1.1 MB, byte-reproducible) and validates the staged plugin against claude plugin validate --strict first. Hand over that one file. The recipient unzips it and picks either path — both are documented in INSTALL.md, which ships inside the archive:

| Path | Command | Trade-off | |---|---|---| | Marketplace | claude plugin marketplace add <dir> then claude plugin install prowl-brand@prowl-brand | Versioned, appears in /plugin. The unzipped folder must stay put — a local-path marketplace is referenced, not copied. | | Drop-in | unzip into ~/.claude/skills/ | Zero commands; loads as prowl-brand@skills-dir next session. No versioned updates. |

Claude Code has no ZIP source type — a marketplace entry takes a relative path, github, a git URL, git-subdir, or npm. So the archive is not a source; it is a folder built to satisfy both offline paths from one artifact. Its root carries .claude-plugin/plugin.json and a marketplace.json whose single entry sits at source: "./".

Never run both paths at once. Two copies means two listings of the same skills, and the plain skills-directory copy wins — usually the stale one.

One channel per agent. If the Claude Code plugin is installed, do not also add the skills-CLI copy for claude-code — the stale plain copy wins and shadows the plugin.

Update

claude plugin marketplace update prowl-brand && claude plugin update prowl-brand@prowl-brand

Restart Claude Code afterwards.

Use

Nothing to invoke — the skills fire on intent. "Write a LinkedIn post about the AEO module", "build an infographic for the Q3 numbers", "is this landing copy on-brand?" all route correctly. To force one: /prowl-brand:prowl-brand or /prowl-brand:prowl-design.

What ships

plugins/prowl-brand/
├── .claude-plugin/plugin.json
└── skills/
    ├── prowl-brand/
    │   ├── SKILL.md
    │   └── references/
    │       ├── voice-and-tone.md     how we sound, per surface
    │       ├── terminology.md        Hunt / Recon / Exploit …, status tags
    │       ├── messaging.md          taglines, one-liner, short + long boilerplate
    │       ├── product-facts.md      canonical numbers — the only place they live
    │       ├── overview.md           positioning, audience, 2026 repositioning
    │       ├── social.md             per-channel register, pillars, hooks
    │       ├── channels.md           official URLs and handles
    │       └── writing-rules.md      the seven rules + pre-publish checklist
    └── prowl-design/
        ├── SKILL.md
        ├── references/
        │   ├── color.md             full palette, aliases, contrast rules
        │   ├── typography.md        three families, weights, scale, exports
        │   ├── logo-and-icons.md    variants, clearspace, regeneration
        │   └── components.md        buttons, cards, status blocks, motion
        └── assets/
            ├── brand.json           machine-readable tokens
            ├── prowl-brand.css      drop-in custom properties + base classes
            ├── templates/artifact.html
            ├── icons/               every logo variant, SVG + PNG, + _gen.py
            └── og-image.png · favicon-96x96.png · prowl-icon.svg

Working in this repo

CLAUDE.md is the entry point — any agent opening this repo reads it first. It sets out the three trees and their different rules:

| Tree | What | Rule | |---|---|---| | plugins/prowl-brand/ | Brand truth. Ships to everyone who installs. | Changes only when the brand or a fact changes. | | internal/ | Reference — competitive map, submission playbook, v1.0 pack. | Read from it; never promote into the plugin. | | workspace/ | Output — posts, pages, campaigns, generated visuals. | Follow workspace/README.md. |

Content pieces are scaffolded, not hand-created — the naming and front matter are validated:

python3 scripts/content.py new linkedin aeo-visibility-teardown --pillar ai-visibility
python3 scripts/content.py index

The second regenerates workspace/plan/calendar.md from the pieces themselves, so the calendar cannot drift from the tree.

The dashboard

Everything above is markdown across forty files. The dashboard puts it on one page, in a browser, for the half of the team that does not run Python:

python3 scripts/dash.py start

The plan with owners, every content piece and its copy, the content plan, what the product shipped, every channel handle, the asset folders, the internal/ index, and the Figma and Miro links — read from the working tree on every request, so it is never a stale snapshot. python3 scripts/preflight.py raises it for you and prints the URL.

It is read-only and bound to 127.0.0.1 only: the page renders internal/, which never ships anywhere, so it is never served anywhere either. It has no idle timeout — python3 scripts/dash.py stop is what stops it.

Not in the plugin

internal/ holds real working material that is not brand and must not ship to every agent that installs this:

  • internal/competitive/ — SEO/GEO market map (205 tools, 24 categories), coverage verdicts, opportunity backlog. Read it when writing comparison copy.
  • internal/submissions/ — directory/social submission playbook, answer bank, per-startup checklists. Carries operator contacts and form links.
  • internal/brandbook-v1-source/ — the v1.0 PDF/DOCX pack. Provenance only. Its typefaces were guessed from screenshots and several hexes drift from the real values; see the CHANGELOG for the corrections.

Ground truth

The live stylesheet https://prowl.chat/static/styles.css (:root) and the live landing page are the authority on colour, type, and product numbers. When this repo disagrees with them, the site wins — fix the repo in the same change, then propagate.

Secrets never go in this repo. Passwords, tokens, and recovery emails live in a password manager, and .gitignore blocks the obvious filenames.

Develop

python3 test/validate.py && python3 test/validate.py --self-test
claude plugin validate ./plugins/prowl-brand --strict && claude plugin validate . --strict

Both must pass before any version bump. See CONTRIBUTING.md for the release checklist.