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

@harborgroup/my-team

v0.4.2

Published

Chat with your local Claude Code subscription from a web dashboard, scoped to the current repo. Dev-only.

Readme

my-team

Chat with your local Claude Code subscription from a web dashboard, scoped to whatever repo you're working in. Dev-only — no API key required, no production code path.

It drives the official @anthropic-ai/claude-agent-sdk, which spawns your existing claude login/subscription. If you're logged in via claude login, it just works.

Setup

In any repo:

npx @harborgroup/my-team init

This adds @harborgroup/my-team as a devDependency and an npm run team script.

Usage

npm run team

Opens a local, token-protected dashboard in your browser (bound to 127.0.0.1 only). If Claude Code isn't installed or logged in yet, you'll see onboarding instructions instead.

Chat runs with this repo as Claude's working directory, and tool calls (file edits, shell commands) are auto-approved via Claude's own safety classifier (permissionMode: 'auto') rather than prompted per action — there's no terminal in this flow to answer y/n prompts.

Your AI CEO

The first time you run npm run team in a repo, Claude opens the conversation itself — it introduces itself and asks about your company (name, mission), what to call itself, and what personality it should have. Once it has answers, it writes .my-team/profile.json itself and adopts that identity from then on: not "an assistant with some context," but your company's AI CEO by name, on every chat turn (via a strong identity system prompt — weak "you're also helping company X" framing gets treated as low-trust incidental context and can get second-guessed; asserting it as configured identity doesn't).

Commit .my-team/profile.json — don't gitignore it. It's shared, non-sensitive team config, the same category as a checked-in CLAUDE.md: the whole point of it living per-repo is that teammates cloning the repo share the same CEO persona without re-onboarding. Use the "Edit profile" button on the dashboard to adjust the company name, mission, CEO name, or personality later; changes take effect on the next chat turn without restarting the server.

Interface

An icon rail (Home / Messages / Profile / Settings) plus a Slack-style Messages page: a #general channel (placeholder for now) and a DM with your CEO, real token-by-token streaming (via the SDK's includePartialMessages), a typing indicator, and a status dot on the CEO's avatar reflecting connection state. It's plain static HTML/CSS/JS talking to the backend over local HTTP + SSE — no browser-only assumptions — so a future native (Tauri) shell can point at the same server without a rewrite; there's no Tauri wrapper yet.

Model & effort

Set a default model and reasoning effort for your CEO on the Profile page (fetched live from the SDK's supportedModels() — the effort dropdown only ever offers levels the chosen model actually supports, e.g. Haiku offers none). Override either per message from a small selector above the chat input; each response shows a small badge with the model actually used.

Updates

On startup, my-team checks the npm registry in the background for a newer published version. If one exists, a banner appears with an "Update" button that runs the install for you (npm install --save-dev the new version) — restart npm run team afterward to pick it up. No auto-restart; that's a deliberate simplicity/safety tradeoff over self-respawning the running server process.

Logs

Every raw request sent to the Claude Agent SDK (including the exact system prompt) and every raw message it streams back is logged verbatim to a JSON-lines file, one per npm run team run, under ~/.my-team/logs/ (outside the repo — old runs beyond a retention count are pruned automatically). The current run's log path is printed on startup and shown on the Settings page.

Clarifying questions

When Iris (or your CEO) wants a structured answer rather than free text, it asks via a real inline widget — text input, single-select, or multi-select (with an automatic "Other" option) — instead of plain prose. This is a text convention the model follows (a fenced question-widget block the frontend parses out of the stream and replaces with an interactive card), not an MCP tool call: a real custom-tool + elicitation round trip was tested directly against the installed SDK and confirmed not to work yet (Claude Code's MCP-client role doesn't currently declare elicitation capability), so this achieves the same UX without that dependency. The main composer is disabled while a widget is awaiting an answer.

Chat history

The visible conversation — not just Claude's own session context — is persisted to .my-team/chat-history.jsonl and replayed on load, so both a page reload and a full server restart show prior messages instead of starting over. A widget that was already answered replays locked to that answer; a widget left unanswered when the server stopped (e.g. it was killed mid-conversation) replays as a genuinely live, answerable widget, composer gating included, picking up exactly where things left off. Unlike profile.json, this file is gitignored automatically (it can contain arbitrary conversation content) — init sets this up, and a plain npm run team self-heals the .gitignore too, so upgrading an existing install doesn't require re-running init.

Staying out of its own way

This dashboard is itself an ordinary Node process running inside the repo it manages. If your CEO ever needs to restart a dev server, broadly killing every node process (taskkill /F /IM node.exe, killall node) would take the dashboard down with it — so the system prompt explicitly warns against that and points at .my-team/server.pid (also gitignored) to identify and exclude the dashboard's own process. The server also logs and continues past uncaught exceptions rather than crashing the whole session.

Resetting

The Settings page has a "Reset to factory settings" button (behind a confirmation step) that deletes .my-team/profile.json and .my-team/chat-history.jsonl and drops the resumed Claude session, so the very next message starts fresh onboarding — no restart needed, no leftover context from the old profile.

Status

v1.7: CLI-auth onboarding + conversational company/CEO-persona onboarding + Slack-style chat shell with real streaming + per-message model/effort selection + update checker + structured logging + inline clarifying-question widgets + persisted chat history + dev-server-restart safety guardrail + factory reset. No multi-user support, no #general backend (sidebar placeholder only).