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

agsmith

v0.1.2

Published

Smith CLI — your extensible agent toolkit

Readme

Agent Smith

Smith CLI — your extensible agent toolkit.

Installation

npm install
npm run build
npm link

Requires Node.js >= 18.

Configuration

All config and credentials live in ~/.agent-smith/.

~/.agent-smith/
  config.json                               # Slack + OpenClaw settings
  credentials/
    gmail-client.json                       # Gmail OAuth client secret
    gmail-user-readonly-token.json          # Gmail read-only token
    gmail-user-modify-token.json            # Gmail modify token

Commands

agsmith config

agsmith config show       Show current config with secrets masked
agsmith config path       Print the path to the config file

agsmith slack

Setup

agsmith slack set api-key <value>         Set the Slack bot/user OAuth token (xoxb-... or xoxp-...)
agsmith slack set main-user-id <value>    Set the primary Slack user ID (e.g. U0123456789)

Commands

agsmith slack channel list                List all channels in the workspace
  --include-archived                    Include archived channels
  --private-only                        Show only private channels
  --public-only                         Show only public channels
  --wrap                                Wrap cell content in table output
  --truncate                            Truncate cell content to column widths

agsmith slack channel create <name>       Create a channel in the workspace
  --private                             Create as a private channel

agsmith gmail

Setup

agsmith gmail import-credentials <path>   Copy OAuth client secret to ~/.agent-smith/credentials/gmail-client.json

agsmith gmail auth                        Run the OAuth flow (read-only, default)
  --readonly                            Request read-only access (default)
  --modify                              Request modify access (required for label operations)

Tokens are saved automatically to ~/.agent-smith/credentials/.

Commands

agsmith gmail list                        List Gmail messages
  --filter <filter>                     Gmail search query (e.g. "is:unread")
  --limit <n>                           Max messages to fetch (default: 20)
  --offset <n>                          Number of messages to skip (default: 0)
  --json                                Output JSON
  --wrap                                Wrap cell content in table output
  --truncate                            Truncate cell content to column widths

agsmith gmail message <message-id>        Show a single message by ID
  --json                                Output JSON
  --pdf [output-path]                   Render the message to a PDF file

agsmith gmail labels                      List all Gmail labels
  --json                                Output JSON
  --wrap                                Wrap cell content in table output
  --truncate                            Truncate cell content to column widths

agsmith gmail update-labels [message-ids...]   Add or remove labels on messages
  --filter <filter>                     Gmail search query to select messages
  --add <label-id>                      Label ID to add (repeatable)
  --remove <label-id>                   Label ID to remove (repeatable)
  --add-name <label-name>               Label name to add (repeatable)
  --remove-name <label-name>            Label name to remove (repeatable)
  --json                                Output JSON

agsmith gmail attachment list <message-id>             List attachments on a message
  --json                                             Output JSON

agsmith gmail attachment download <message-id> <attachment-id>   Download an attachment
  --output-dir <dir>                    Directory to write the file into (default: .)
  --filename <name>                     Override the output filename
  --json                                Output JSON

agsmith openclaw

Setup

agsmith openclaw set config-dir <path>      Set the path to the OpenClaw config directory
agsmith openclaw set default-model <model>  Set the default model for new agents

Commands

agsmith openclaw agent create <agent-name>

Creates an OpenClaw agent, a matching Slack channel, and binds them together. If the channel or agent already exists, the existing resources are reused.


agsmith iterm

Requires macOS with iTerm2 installed.

agsmith iterm list                         List all iTerm2 windows, tabs, and sessions
  --json                                 Output JSON

agsmith iterm new <session> [cwd] [command] [args...]
                                         Create a new tab, optionally cd and run a command

agsmith iterm run <session> <command> [args...]
                                         Run a command in a named session (sends Ctrl+C first)