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

@ashish-tradex/wryt

v0.28.1

Published

Creative-copy + long-form CLI grounded in your best examples. Short-form: a spread of candidates judged through the recipient's eyes. Long-form: full blog posts in a matched writer's style and from-scratch CVs, both held to a reference standard. Opt-in we

Readme

wryt

A tiny CLI for short-form creative copy — dating openers, taglines, titles, hooks, blog intros — grounded in your library of best examples. It writes something new at or above the level of those examples, never a reworded copy of them, and gets better as you tell it which outputs land.

your task ─▶ writer ─▶ recipient judge ─▶ deliverable
             (5 candidates,   (ranks them as the person
              keeps the        who has to reply / click /
              fresh ones)       keep reading — ships the best)
             primary model → failover · 2 model calls

Two calls, no planning crew, no refinement loops. The quality pressure comes from your examples and a recipient's-eye judge — not from telling a model to "be creative."

Install

npm i -g @ashish-tradex/wryt

Setup

wryt login <your-gateway-key>

If you already use the sibling nexel-cli, wryt reuses that key automatically — no setup.

Use

wryt                       # interactive chat — just type, keep talking
wryt "give me a tinder opener"
wryt "a tagline for my note-taking app"
wryt "a blog intro about remote work"

# paste real material and it gets far sharper — this is the biggest lever:
wryt "opener for this profile: golden retriever named Biscuit, hikes, bio says 'fluent in sarcasm'"

Long-form

wryt "write a blog post about X"   # full post in a matched writer's style, held to a reference standard
wryt cv                            # from-scratch CV via a short interview — grounded, never fabricates

Blog and CV modes ship their own reference library (writer-style profiles + CV conventions), installed into ~/.wryt/library/ on first run — edit any card to change the bar, they're never overwritten.

Fresh (opt-in web search)

Time-bound topics ("latest", "2026", "trends") pull live web context before writing so the copy isn't stale — automatic for blogs and for short-form asks naming a concrete thing (a product, a company). Force it with --fresh, or off with --no-search. Search grounds facts only; your voice and library still set the bar.

How it works

  1. Writer (Verbalized Sampling). Instead of one answer, the writer returns 5 candidates with its own probability for each, and wryt keeps the low-probability tail — the fresh, non-default lines. (Asking for the distribution is a known fix for the "every answer sounds the same" problem.)
  2. Recipient judge. A different model role-plays the actual reader — the person deciding in two seconds whether to reply, click, or keep reading — ranks the candidates the way they'd really react, and checks whether the best one beats your proven examples.
  3. Copy gate. A free local check ships the top-ranked candidate that doesn't reuse or overlap a library line.

Teach it — the flywheel

Your judgments become the system's taste. Each writes a plain, editable card the next matching task reads automatically:

wryt like          # this is the level to hit  → my-winners.md
wryt worked        # this got a real result    → my-worked.md   (strongest bar)
wryt nah "reason"  # avoid this pattern         → my-rejects.md

Rate ruthlessly — the system faithfully learns whatever you actually reward.

The library (all plain markdown, matched by keyword)

Drop cards into ~/.wryt/library/ (or ./.wryt/library/, or your existing ~/.nexel/knowledge/). Each has frontmatter with match: keywords; nothing loads unless it earns its place. Card kinds:

| name pattern | what it holds | who reads it | |---|---|---| | *-sourced | your best example lines | writer (as the bar) + copy gate | | *-problems | known failure modes | the judge | | *-audience-voice | how the recipient reacts — what earns a reply/click, what's burned out | the judge (as its persona) | | my-winners / my-worked / my-rejects | grown by like/worked/nah | judge + writer |

---
name: dating-openers-sourced
description: openers that actually get replies
match: tinder, hinge, first message, opener
---
## High-response openers
- What's something you're irrationally competitive about?
wryt lib                 # list your cards + their match keywords
wryt lib add my-examples # scaffold a new card

All taste lives in these cards, not in code — to change what wryt considers good or bad, you edit markdown, not TypeScript. That's also how you extend it: add a *-sourced card for a new content type, or an *-audience-voice card (yours, or mined from what real readers say online) to sharpen the judge.

One honest limit

A context-free ask ("give me a tinder opener", no profile) caps at excellent-generic — even a perfect line can't reference specifics it doesn't have. Paste the real material and the ceiling disappears. wryt marks the one detail it can't know with a single [slot] rather than inventing it.