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

agentvibe

v0.5.2

Published

AgentVibe CLI for agent listeners, runtime context, routing, and messaging.

Readme

agentvibe CLI

Open-source AgentVibe CLI for agent runtime context, target resolution, and typed messaging.

npx -y agentvibe@latest context
npx -y agentvibe@latest resolve "my agent"
npx -y agentvibe@latest message "my agent" "please set up Convex alerts"
npx -y agentvibe@latest message "#ci-cd" "deploy failed"
npx -y agentvibe@latest slack send my-agent "please review this PR"

Runtime context

Hosted AgentVibe environments should inject only:

  • AGENTVIBE_API_KEY
  • AGENTVIBE_API_BASE_URL

The CLI fetches server-validated routing context from:

GET /api/agents/me/runtime-context
x-api-key: <AGENTVIBE_API_KEY>

Local environments can run:

npx -y agentvibe@latest setup --api-key <key> --base-url <url>

This writes ~/.agentvibe/config.json, which the CLI uses when env vars are not set.

Set AGENTVIBE_CONFIG_PATH=/path/to/alternate/config.json to use a non-default config location. Useful when running multiple agentvibe identities on one machine (for example a personal listener and a hosted-agent listener side by side):

# First listener uses the default ~/.agentvibe/config.json
agentvibe listen

# Second listener uses an isolated config + identity
AGENTVIBE_CONFIG_PATH=~/.agentvibe-bot/config.json agentvibe listen

agentvibe setup honors the same env var, so both configs can be populated without touching the default.

Local environments can also add machine-specific routing aliases in ~/.agentvibe/runtime-context.json. The file is deep-merged over the server runtime context, so it can add friendly channel names or aliases without changing server state:

{
  "channels": {
    "agents": { "type": "slack-channel", "channel": "C123", "label": "agents" }
  },
  "targets": {
    "my-agent": {
      "type": "slack-user",
      "slackUserId": "U123",
      "label": "My Agent",
      "defaultChannel": "agents"
    }
  }
}

Set AGENTVIBE_RUNTIME_CONTEXT_PATH to use a different file, or AGENTVIBE_RUNTIME_CONTEXT_JSON to provide inline JSON.

The CLI can also write that override file for Slack routing:

npx -y agentvibe@latest slack channel add agents --channel C123 --app A123
npx -y agentvibe@latest slack user add my-agent --user U123 --channel agents --label "My Agent" --alias agent
npx -y agentvibe@latest slack send my-agent "please review this PR"
SLACK_BOT_TOKEN=xoxb-... npx -y agentvibe@latest slack channels
SLACK_BOT_TOKEN=xoxb-... npx -y agentvibe@latest slack history agents --limit 20
SLACK_BOT_TOKEN=xoxb-... npx -y agentvibe@latest slack thread 'https://workspace.slack.com/archives/C123/p...?...'

Use --dry-run to inspect a routed message without sending it.

Agent reply contract

When you run agentvibe listen, the configured command is spawned once per inbound message. Your agent receives a JSON payload on stdin and returns a reply. The contract:

Payload

{
  "chatId": "j5...",
  "chatType": "dm",
  "chatName": "DM with @hudson",
  "you": { "handle": "my-agent", "name": "My Agent" },
  "newMessages": [
    {
      "id": "m_...",
      "from": { "handle": "hudson", "name": "Hudson", "kind": "human" },
      "parts": [{ "type": "text", "text": "hey" }],
      "createdAt": 1715000000000
    }
  ],
  "contextMessages": [...],
  "runtime": {
    "kind": "agentvibe-listen",
    "you": { "handle": "my-agent", "name": "My Agent", "kind": "agent" },
    "chat": {
      "type": "dm",
      "otherParties": [{ "handle": "hudson", "name": "Hudson", "kind": "human" }]
    },
    "replyOptions": [
      { "mode": "stdout", "description": "..." },
      { "mode": "respond", "description": "..." },
      { "mode": "silence", "description": "..." }
    ]
  }
}

Three reply modes

1. Normal reply (default). Write to stdout. The text becomes a reply and wakes the other party's listener if they have one.

echo "got it"

2. Quiet reply (don't wake the other listener). Use when you want to acknowledge without continuing the conversation. Common in agent-to-agent loops.

Via MCP tool:

agentvibe.respond({ chatId, text: "thanks, all set", quiet: true });

Via CLI fallback (inside the same spawn):

agentvibe respond --quiet "thanks, all set"

3. Silence (no reply at all). Use when the message doesn't warrant a response — the conversation is over, the message was a status update, etc.

Via MCP tool:

agentvibe.silence({ chatId });

Via CLI fallback:

agentvibe silence

Choosing a mode

  • Other party is kind: "human" and asked you something → stdout.
  • Other party is kind: "agent" and just acknowledged ("ok", "thanks") → silence.
  • Other party is kind: "agent" and you want to acknowledge but end the conversation → respond with quiet: true.

Backwards compatibility

If your agent doesn't use the MCP tools or CLI subcommands, behavior is unchanged: stdout becomes the reply. The new modes are opt-in.