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

@chatpanel/cli

v0.37.2

Published

ChatPanel in the terminal — the same chats, models, tools, memory and teams as the extension and the desktop, through the local gateway, as a TUI and as scriptable commands.

Readme

ChatPanel CLI

ChatPanel in the terminal — the same chats, models, tools, memory, skills and teams as the browser extension and the desktop app, through the local gateway, as a chat screen and as commands you can script.

npm i -g @chatpanel/cli
chatpanel                      # the chat screen (also `cpcli` and `chatpanel-cli`)
chatpanel -c                   # continue the last chat · -r picks one
chatpanel ask "what did we decide about the rollback?"

It needs the ChatPanel gateway running on this machine (chatpanel-gateway, or the desktop app, which bundles it). The gateway is what redacts personal data before a model sees it, routes to the model or coding agent you pick, and holds the history every ChatPanel client shares — so a chat you have here is in the extension's history and the desktop's list a few seconds later, and theirs are here.

The screen

❯ What did we decide about the rollback?                              14:02
◆ Codex
  ⚙ find history_search "rollback"  ✓ 0.4s
  You decided to roll back on Friday, after the …

╭──────────────────────────────────────────────────────────────╮
│ ❯ Ask anything — / for commands                              │
╰──────────────────────────────────────────────────────────────╯
 Codex · redacted · gateway 0.10.0
 1.2s first token · 8.6s

| Key | Does | |---|---| | Enter | send — Alt+Enter or a trailing \ adds a line; a paste keeps its lines | | Esc | stop the reply · close a menu | | ↑ ↓ | input history · move in a menu | | Tab | complete a /command | | Ctrl+P | pick a model or agent | | Ctrl+O | open a past chat | | Ctrl+N | new chat | | Ctrl+S | send the message you typed while a reply was running (steer) | | Ctrl+R | ask the last question again | | Ctrl+C | leave (twice while a reply runs) |

The colours are the product's own palette (@chatpanel/events/theme.js), so the terminal looks like the side panel. Text itself is never painted — your terminal's own foreground is used, so it reads on any background; --theme light or --theme dark picks the matching greys when the terminal does not say which it is (COLORFGBG), --theme ansi is for a 16-colour one (chatpanel config set theme light to keep it). Code blocks are framed and highlighted, links and headings coloured, every answer ends with what it cost (time to first token, tokens, tool calls).

Type / for the menu. Built-ins: /model, /new, /chats, /search, /open, /memory, /skills, /teams, /runs, /redact, /retry, /edit, /stop, /rename, /resume, /sh, /sync, /status, /sideline, /help, /quit (or /exit).

!<command> runs a command in your shell (!git status, !npm test 2>&1 | tail). The output shows in the transcript and rides into your next question, so "why did that fail?" has the failure in front of the model. Esc kills a long one. Non-interactive — no vim here. Every skill, recipe, team and agent you saved in the extension or the desktop is a /command here too — /summarize the thread, /research compare A and B — because they live on the gateway, not in any one client.

While a reply streams you see what the turn is doing (which tool it called, what a coding agent is reading), and you can keep typing: the next message queues and is sent when the reply ends. When a tool wants to do something destructive, or the model proposes saving a recipe or a team, a card asks you — y, n, or a for always.

Commands

chatpanel ask "<question>" [--model <id>] [--chat <id> | --continue] [--no-tools] [--redaction off] [--json]
chatpanel models [--all]                 # what can answer, agents first
chatpanel chats [filter]                 # chats on this client; continue one with --chat <id>
chatpanel show <record id>               # a chat, note or meeting
chatpanel search "<question>" [-c]         # researched over all your records, answered with the ones it cites
chatpanel search --list "<words>" [--type note] [--since 7d]   # the index hits instead
chatpanel memory [remember "<fact>" | forget <id>]
chatpanel skills · teams · runs [<id> | stop <id>]
chatpanel sync [--push] [--pull]
chatpanel status
chatpanel config set model codex         # this terminal's defaults
chatpanel redact "<text>"                # what the model would receive

ask reads stdin as context when piped (git diff | chatpanel ask "review this"), streams the answer, and prints the chat id so you can continue it. --json gives a script the answer, the model, usage, timing and the tool steps in one object.

Your folder, once you say so

Start cpcli inside a project and it asks, once: let coding agents work here? Say yes and a Codex or Claude Code turn asked from that chat reads and changes files in that folder — the answer to "where did the agent put the file" is "where you started". Say always and the folder is remembered (~/.chatpanel/cli/settings.json, and its subfolders count). Say no and agents keep using the gateway's default workspace, ~/.chatpanel/workspace. /cwd shows or changes it; chatpanel config trust [dir] / untrust from a script; ask --trust or ask --cwd <dir> for a one-off. Your home directory and / are never a project. Needs gateway 0.11.1 or newer — an older one keeps its default and says so in the trail.

Where things live

Everything is under ~/.chatpanel, next to the gateway's own files: the CLI's records and turn log in ~/.chatpanel/cli/events.db, its settings in ~/.chatpanel/cli/settings.json. Shared settings — MCP servers, skills, web search, tool policy, teams, agents, recipes — are the gateway's (/v1/prefs) and are never copied here. The CLI authenticates to the gateway as you, with the token the gateway writes to ~/.chatpanel/gateway-token.

CHATPANEL_GATEWAY_URL points it at another gateway; CHATPANEL_HOME moves the directory.

Privacy

The CLI never talks to a model directly. Every turn goes through the gateway, which replaces names, emails, numbers and secrets with placeholders before the request leaves the machine and restores them in the reply. When the model needs to look something up, the tool runs here on the real values and its result is redacted again before the model reads it. /redact preview <text> shows exactly what would be sent; /redact off turns it off for one chat, visibly.

Development

npm install
npm test                    # the suite
node bin/chatpanel.js       # run from source
npm run build               # the minified package in build/npm/ (what is published)
npm run test:dist           # …and the suite against it

Node 22.12 or newer. The chat logic — the tool loop, presence, prefetch, the gates, teams, sync — is @chatpanel/events and @chatpanel/pii, shared with the other clients; src/core/ binds them to Node and the gateway, src/tui/ draws, src/commands/ prints.