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

agent-messenger

v2.17.0

Published

Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, Instagram, KakaoTalk, Channel Talk)

Readme

Agent Messenger

npm platform platform platform platform platform platform platform platform platform platform platform

Your agent messages as you — not as a bot

One CLI for Slack, Discord, Teams, Webex, Telegram, WhatsApp, LINE, Instagram, KakaoTalk, and Channel Talk. Credentials extracted from desktop apps and browsers, or authenticated in seconds — no API keys, no OAuth, no admin approval. TypeScript SDK included.

Table of Contents

Why Agent Messenger?

You shouldn't need a bot token to send a message.

Every platform gates API access behind OAuth apps that need admin approval — days of waiting just to send a message. And even then, your agent is a bot, not you. Different name, different permissions, different context.

Agent Messenger reads session tokens from your Slack, Discord, Teams, KakaoTalk, or Channel Talk desktop app — zero config. If the desktop app isn't installed, it falls back to extracting from Chromium browsers, with auth extract --browser-profile <path> for custom Chromium profile locations. Webex and Instagram tokens are extracted directly from browsers. Telegram authenticates with a one-time phone code, and WhatsApp with a QR code or pairing code. Either way, your agent operates as you — same name, same permissions, same context. Bot tokens are fully supported too for server-side and CI/CD use cases.

  • Auto-Extract Auth — Reads tokens from Slack, Discord, Teams, KakaoTalk, and Channel Talk desktop apps, with browser fallback and custom Chromium profile paths via --browser-profile. Webex and Instagram tokens extracted from Chromium browsers. Telegram and WhatsApp authenticate with a one-time code — still under a minute
  • Act As Yourself — Extracts your user session — not a bot token. Your agent sends messages, reacts, and searches as you. Need bot mode? Bot CLIs are included too
  • One Interface — Consistent command style across 7 platforms for supported actions (e.g. message send, message search, channel list, snapshot). Learn once
  • Agent-Native Output — JSON by default for LLM tool use. --pretty for human-readable. Structured output your agent can parse and act on
  • Token Efficient — CLI, not MCP. One skill file, one shell command per action. No server to run, no tool registration. (Why not MCP?)
  • Persistent Memory — Stores workspace IDs, channel mappings, and preferences in ~/.config so your agent never asks twice
  • TypeScript SDK — Import clients directly into your app. Full type safety with Zod schemas

Installation

CLI (global install for terminal / AI agent use):

npm install -g agent-messenger

SDK (project dependency for programmatic use):

npm install agent-messenger

The global install gives you all platform CLIs. The project install gives you both CLIs and the TypeScript SDK.

This installs:

  • agent-slack — Slack CLI (user token, zero-config)
  • agent-slackbot — Slack Bot CLI (bot token, for server-side/CI/CD)
  • agent-discord — Discord CLI
  • agent-discordbot — Discord Bot CLI (bot token, for server-side/CI/CD)
  • agent-teams — Microsoft Teams CLI
  • agent-webex — Cisco Webex CLI (browser token extraction with e2e encryption + OAuth Device Grant, zero-config)
  • agent-telegram — Telegram CLI (user account via TDLib)
  • agent-telegrambot — Telegram Bot CLI (bot token, for server-side/CI/CD)
  • agent-whatsapp — WhatsApp CLI (user account via Baileys, QR code or pairing code auth)
  • agent-whatsappbot — WhatsApp Bot CLI (Cloud API, for server-side/CI/CD)
  • agent-line — LINE CLI (QR code login, Thrift protocol)
  • agent-wechatbot — WeChat Bot CLI (Official Account API, for server-side/CI/CD)
  • agent-instagram — Instagram DM CLI (browser cookie extraction + username/password auth)
  • agent-kakaotalk — KakaoTalk CLI (sub-device login, LOCO protocol)
  • agent-channeltalk — Channel Talk CLI (beta, zero-config, extracted cookies)
  • agent-channeltalkbot — Channel Talk Bot CLI (beta, API credentials, for server-side/CI/CD)

Agent Skills

Agent Messenger includes Agent Skills that teach your AI agent how to use each CLI above. One skill per CLI — install only what you need.

SkillPad

SkillPad is a GUI app for Agent Skills. See skillpad.dev for more details.

Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad Available on SkillPad

Skills CLI

Skills CLI is a CLI tool for Agent Skills. See skills.sh for more details.

npx -y skills add agent-messenger/agent-messenger

Claude Code Plugin

claude plugin marketplace add agent-messenger/agent-messenger
claude plugin install agent-messenger

Or within Claude Code:

/plugin marketplace add agent-messenger/agent-messenger
/plugin install agent-messenger

Quick Start

Get up and running in 30 seconds:

# 1. See your workspace at a glance
agent-slack snapshot --pretty

# 2. Send a message
agent-slack message send general "Hello from the CLI!"

That's it. Credentials are extracted automatically from your Slack desktop app on first run. No OAuth flows. No API tokens. No configuration files.

Custom config directory

By default, Agent Messenger stores credentials, sync state, and derived-key caches under ~/.config/agent-messenger. To relocate everything (e.g. for CI sandboxes, multi-tenant setups, or non-default home directories), set the AGENT_MESSENGER_CONFIG_DIR environment variable:

export AGENT_MESSENGER_CONFIG_DIR="$HOME/.local/share/agent-messenger"
agent-slack auth extract

The variable is read on every CLI/SDK invocation and applies to all platforms (Slack, Discord, Teams, Webex, Telegram, WhatsApp, LINE, WeChat, Instagram, KakaoTalk, Channel Talk, and their bot variants). Explicit configDir arguments to credential managers still take precedence.

Telegram Quick Start

Get up and running with Telegram in a minute:

bunx --package agent-messenger agent-telegram auth login

# Send a message
bunx --package agent-messenger agent-telegram message send <chat-id-or-@username> "Hello from the CLI!"

The CLI automatically provisions API credentials via my.telegram.org if needed. For CI/CD, set AGENT_TELEGRAM_API_ID and AGENT_TELEGRAM_API_HASH environment variables.

SDK

Use Agent Messenger as a TypeScript library. Each platform exports a typed client, credential manager, types, and Zod schemas.

Quick Example

import { SlackClient } from 'agent-messenger/slack'

const slack = await new SlackClient().login()
const channels = await slack.listChannels()
await slack.sendMessage(channels[0].id, 'Hello from the SDK!')

Credentials are resolved the same way as the CLI — auto-extracted from your desktop apps. Call .login() with no arguments for auto-extraction, or pass credentials explicitly:

const slack = await new SlackClient().login({ token: 'xoxc-...', cookie: 'xoxd-...' })

Available Imports

| Import Path | Client | | --- | --- | | agent-messenger/slack | SlackClient | | agent-messenger/slackbot | SlackBotClient | | agent-messenger/discord | DiscordClient | | agent-messenger/discordbot | DiscordBotClient | | agent-messenger/teams | TeamsClient | | agent-messenger/webex | WebexClient | | agent-messenger/telegrambot | TelegramBotClient | | agent-messenger/whatsapp | WhatsAppClient | | agent-messenger/whatsappbot | WhatsAppBotClient | | agent-messenger/line | LineClient | | agent-messenger/wechatbot | WeChatBotClient | | agent-messenger/instagram | InstagramClient | | agent-messenger/kakaotalk | KakaoTalkClient | | agent-messenger/channeltalk | ChannelClient | | agent-messenger/channeltalkbot | ChannelBotClient |

Each module also exports its credential manager, Zod schemas, and TypeScript types:

import { SlackClient, SlackCredentialManager, SlackMessageSchema } from 'agent-messenger/slack'
import type { SlackMessage, SlackChannel } from 'agent-messenger/slack'

Manual Credential Setup

Every client supports .login() with explicit credentials for advanced use cases:

import { SlackClient } from 'agent-messenger/slack'

const client = await new SlackClient().login({ token: 'xoxc-...', cookie: 'xoxd-...' })
const messages = await client.getMessages('C01234567')

Real-time Events (Slack)

import { SlackClient, SlackListener } from 'agent-messenger/slack'

const client = await new SlackClient().login()
const listener = new SlackListener(client)
listener.on('message', (event) => {
  console.log(`New message in ${event.channel}: ${event.text}`)
})
await listener.start()

Real-time Events (KakaoTalk)

import { KakaoTalkClient, KakaoTalkListener } from 'agent-messenger/kakaotalk'

const client = await new KakaoTalkClient().login()
const listener = new KakaoTalkListener(client)
listener.on('message', (event) => {
  console.log(`New message in ${event.chat_id}: ${event.message}`)
})
listener.on('emoticon', (event) => {
  console.log(`Sticker (${event.emoticon_kind}) in ${event.chat_id}: ${event.sticker_path}`)
})
await listener.start()

Real-time Events (Discord Bot)

Stream messages, reactions, and slash command interactions directly from Discord's Gateway WebSocket — no public HTTP endpoint required.

import { DiscordBotClient, DiscordBotListener, DiscordIntent } from 'agent-messenger/discordbot'

const client = await new DiscordBotClient().login({ token: 'YOUR_BOT_TOKEN' })
const listener = new DiscordBotListener(client, {
  // Privileged intents (MessageContent, GuildMembers, GuildPresences) must be enabled
  // in the Discord Developer Portal before they can be used.
  intents: DiscordIntent.Guilds | DiscordIntent.GuildMessages | DiscordIntent.MessageContent,
})

listener.on('message_create', (event) => {
  console.log(`New message in ${event.channel_id}: ${event.content}`)
})

listener.on('interaction_create', (event) => {
  const name = (event.data as { name?: string } | undefined)?.name
  console.log(`Slash command received: ${name}`)
})

await listener.start()

Real-time Events (Telegram Bot)

Stream messages, callback queries, and other updates via long-polling — no public HTTPS endpoint required. Telegram Bot API does not support WebSockets, so the listener uses getUpdates long-polling, which is the canonical approach used by frameworks like grammy and telegraf.

import { TelegramBotClient, TelegramBotListener } from 'agent-messenger/telegrambot'

const client = await new TelegramBotClient().login({ token: 'YOUR_BOT_TOKEN' })
const listener = new TelegramBotListener(client, {
  allowedUpdates: ['message', 'callback_query'],
})

listener.on('message', (message) => {
  console.log(`New message in ${message.chat.id}: ${message.text}`)
})

listener.on('callback_query', (query) => {
  console.log(`Button clicked: ${query.data}`)
})

await listener.start()

Real-time Events (Slack Bot)

Stream Events API events, slash commands, and interactive components over Slack's Socket Mode WebSocket — no public HTTP endpoint required. Requires an app-level token (xapp-...) with the connections:write scope, separate from your bot token.

import { SlackBotClient, SlackBotListener } from 'agent-messenger/slackbot'

const client = await new SlackBotClient().login({ token: 'xoxb-...' })
const listener = new SlackBotListener(client, {
  appToken: process.env.SLACK_APP_TOKEN!, // xapp-...
})

listener.on('message', ({ ack, event }) => {
  ack()
  console.log(`New message in ${event.channel}: ${event.text}`)
})

listener.on('slash_commands', ({ ack, body }) => {
  ack({ text: `Got \`${body.command} ${body.text}\`` })
})

await listener.start()

TUI (Experimental)

A unified terminal interface for all your messaging platforms in one screen. Navigate between Slack, Discord, Teams, Webex, Telegram, WhatsApp, LINE, Instagram, KakaoTalk, and Channel Talk — all from your terminal.

Note: The TUI is a showcase of what's possible with Agent Messenger's SDK. It demonstrates the power of having a unified adapter layer across all platforms.

agent-messenger tui

Agent Messenger TUI

Key features:

  • Multi-platform — All 10 platforms in one sidebar, auto-login on startup
  • Real-time messages — Live message streaming for supported platforms
  • Fuzzy pickersCtrl+K for channels, Ctrl+W for workspaces
  • Interactive auth — Authenticate platforms that aren't set up yet, right in the TUI

See the TUI docs for keybindings, architecture, and more.

Supported Platforms

| Feature | Slack | Discord | Teams | Webex | Telegram | WhatsApp | LINE | WeChat | Instagram | KakaoTalk | Channel Talk (beta) | | -------------------------- | :---: | :-----: | :---: | :---: | :------: | :------: | :---: | :----: | :-------: | :-------: | :-----------------: | | Auto credential extraction | ✅ | ✅ | ✅ | ✅ | — | — | — | — | ✅ | ✅ | ✅ | | Send & list messages | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | | Direct messages | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Search messages | ✅ | ✅ | — | — | — | ✅ | — | — | ✅ | — | ✅ | | Threads | ✅ | ✅ | — | — | — | — | — | — | — | — | — | | Channels & Users | ✅ | ✅ | ✅ | ✅ | partial | — | ✅ | ✅ | — | — | ✅ | | Reactions | ✅ | ✅ | ✅ | — | — | ✅ | — | — | — | — | — | | File uploads | ✅ | ✅ | ✅ | — | — | — | — | — | — | ✅ | — | | File downloads | ✅ | — | — | — | — | — | — | — | — | — | — | | Workspace snapshots | ✅ | ✅ | ✅ | ✅ | — | — | — | — | — | — | ✅ | | Multi-workspace / account | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Activity feed | ✅ | — | — | — | — | — | — | — | — | — | — | | Drafts | ✅ | — | — | — | — | — | — | — | — | — | — | | Saved items | ✅ | — | — | — | — | — | — | — | — | — | — | | Unread messages | ✅ | — | — | — | — | — | — | — | — | — | — | | Sidebar sections | ✅ | — | — | — | — | — | — | — | — | — | — | | Pins & bookmarks | ✅ | — | — | — | — | — | — | — | — | — | — | | Scheduled messages | ✅ | — | — | — | — | — | — | — | — | — | — | | Channel management | ✅ | — | — | — | — | — | — | — | — | — | — | | Reminders | ✅ | — | — | — | — | — | — | — | — | — | — | | User groups | ✅ | — | — | — | — | — | — | — | — | — | — | | Real-time events (SDK) | ✅ | ✅ | — | — | — | — | ✅ | — | ✅ | ✅ | — | | Bot support | ✅ | ✅ | — | — | ✅ | ✅ | — | ✅ | — | — | ✅ |

⚠️ Teams tokens expire in 60-90 minutes. Re-run agent-teams auth extract to refresh. See Teams Guide for details.

Platform Guides

Use Cases

Gathering Context

Pull context from conversations before you start working — no tab-switching, no skimming.

"Read the #incident-api-outage thread in Slack and summarize the root cause, timeline, and action items so I can write the postmortem."

"Search our Discord #architecture channel for any previous discussion about event sourcing before I write a proposal."

"Check my unread messages across all Slack channels and tell me if anything needs my attention."

"Look through #frontend in Slack for messages about the login page redesign from the past two weeks and summarize the decisions made."

"Search Teams for any messages mentioning 'API deprecation' so I know if this was discussed before."

Communicating & Reporting

Send updates, file reports, and notify your team — all from a prompt.

"Post a deployment summary to #releases in Slack with the commit hash, changelog, and deploy status."

"Send a message to the #standup channel with what I worked on yesterday, what I'm doing today, and any blockers."

"Cross-post this announcement to #general in Slack, the announcements channel in Discord, and the General channel in Teams."

"Upload the latest test coverage report to #ci-results in Slack."

"React with ✅ to the last message in #deploy-requests to confirm I've handled it."

Automation & Pipelines

Wire messaging into your CI, scripts, or agent workflows.

"After every CI run, post the build status and test results to #builds in Slack — include the branch name and commit link."

"When a long-running migration finishes, notify me in Discord with the final row count and elapsed time."

"Every morning at 9am, snapshot my Slack workspace and post a summary of active channels to #team-pulse."

"Send an alert to #oncall in Slack whenever the error rate exceeds 1% — include the service name and a link to the dashboard."

"Read the latest message in #releases, then cross-post it to our Discord announcements channel."

...and More

These are just starting points. Your agent has full read/write access to Slack, Discord, Teams, Telegram, WhatsApp, LINE, Instagram, KakaoTalk, and Channel Talk — anything you'd do manually in a chat app, it can handle for you. If you build something cool with Agent Messenger, let me know!

Philosophy

Why CLI, not MCP?

MCP servers expose all tools at once, bloating context and confusing agents.

| MCP Approach | Agent Skills + CLI | | --- | --- | | All tools loaded at once | Load only what you need | | Bloated context window | Minimal token usage | | Agent confused by options | Focused, relevant tools | | Requires a running server | One shell command per action |

With Agent Messenger, your agent loads the skill it needs, uses the CLI, and moves on. No wasted tokens. The SDK complements the CLI for when you need programmatic access—same credentials, same platform coverage, full type safety.

Why not OAuth?

OAuth requires creating an app and workspace admin approval—days of waiting just to send a message. Agent Messenger skips all of that. Your desktop apps already have valid session tokens; Agent Messenger extracts them directly so you can start messaging immediately. For platforms like Telegram, WhatsApp, and LINE, a one-time authentication flow gets you in fast.

For server-side bots and CI/CD, bot tokens are fully supported via agent-slackbot, agent-discordbot, agent-telegrambot, agent-whatsappbot, agent-wechatbot, and agent-channeltalkbot.

Inspired by agent-browser from Vercel Labs.

Contributing

bun install    # Install dependencies
bun link       # Link CLI globally for local testing
bun test       # Run tests
bun test:e2e   # Run e2e tests
bun typecheck  # Type check
bun lint       # Lint
bun lint:fix   # Lint with autofix
bun format     # Format
bun run build  # Build

Thanks

License

MIT