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

@c4t4/heyamigo

v0.12.1

Published

WhatsApp and Telegram AI bot powered by Claude, Codex, or Grok with long-term memory, browser control, and role-based access

Readme

heyamigo

A chat-resident assistant for WhatsApp and Telegram. Claude, Codex, or Grok under the hood, durable SQLite queues, per-sender timezone scheduling, two-track architecture so browser work never blocks the chat.

WhatsApp / Telegram ─► inbound ─► chat workers ─► outbound ─► WhatsApp / Telegram
                                     │                ▲
                                     ├──────► async / browser ─┤
                                     └──────► memory_writes ───┘

What it does

  • Long-term memory per person, per chat, per topic. Files on disk. The agent decides what's worth keeping; background workers consolidate while you're not chatting.
  • A relevance watchlist. Open loops the agent tracks on your behalf — questions you'd forget, things you're waiting on — surfaced naturally when the moment matches. Built like external working memory for the user.
  • Scheduling in the sender's timezone. Natural language → [REMIND: 2026-05-26 09:00 — ...] or [CRON: 0 9 * * 1 PROMPT — ...]. Fires at the user's wall-clock 9am, not the server's. Cron variants: deliver text, run AI, kick off async work, or drive a browser.
  • A real Chrome. Browser delegation via [ASYNC-BROWSER: ...] to a parallel provider session on a shared logged-in Chrome over CDP. TikTok, Instagram, anywhere the owner is logged in. SSH-tunneled noVNC for setup.
  • Per-reply footer with confirmation tags. Every side effect from the turn is visible: _9.9s · 465k↑ 169↓ · +remind · +thread-new · +digest_. No guessing whether a schedule actually got created.
  • Default-deny chat activation. Groups and DMs only answer when their own triggerMode is set in config/access.json; missing means off. Per-role token quotas, file-size caps, tool restrictions.

For the why behind these — claim primitives, tag-as-side-effect channel, per-category learning, provider abstraction, the trade-offs that didn't survive the first revision — see docs/architecture.md.

Quick start

npm install -g @anthropic-ai/claude-code
claude                                  # log in once, then exit

npx @c4t4/heyamigo setup                # wizard: pair WhatsApp, pick personality
npx @c4t4/heyamigo start                # background, auto-restart
npx @c4t4/heyamigo logs                 # tail

Telegram is optional. Create a bot with BotFather, set telegram.enabled: true and telegram.botToken in config/config.json, then allow users/groups in config/access.json. Telegram user keys use tg_<user_id>; Telegram group entries use addresses like tg:group:-1001234567890.

Other providers:

  • Codex: install @openai/codex and set ai.provider: "codex" in config/config.json.
  • Grok Build: install with curl -fsSL https://x.ai/cli/install.sh | bash, run grok login, and set ai.provider: "grok".

In-chat commands

| Command | What it does | |---|---| | /reset | Fresh AI session for this chat | | /status | Session info, context utilization | | /queues | Live queue depths | | /crons · /reminders | List recurring schedules + one-shots (token cost included) | | /threads | List the relevance watchlist; resolve / drop / pause / weight | | /digest | Force a memory consolidation now |

Roles

config/access.json. Three default roles, easily extended.

| Role | Memory | Tools | Notes | |---|---|---|---| | admin | everything | all | unrestricted | | user | own profile | none | can't see other users or internals | | guest | none | none | prompt-injection resistant |

Personalities

config/personalities/*.md — system-prompt fragments that define the bot's voice. The default (sharp.md) is opinionated about not people-pleasing. Swap or write your own.

Where to run it

A VPS (Hetzner, DO) at ~$5/mo is the path of least resistance. Home server or Raspberry Pi also fine. Needs Node 18+, a persistent filesystem, and outbound access to the enabled chat channels. Not serverless-compatible.

Tracking memory with git

The bot writes markdown files under storage/memory/ as it learns. git init in your project root and commit periodically gives you a readable diff of what the assistant has come to believe about people and topics. Skip storage/auth/ (WhatsApp keys) and storage/logs/.

License

MIT. Built by Catalin Waack · LinkedIn.