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

opencode-zellij-agent-comm

v0.1.0

Published

OpenCode agent-to-agent communication across Zellij panes, tabs, and sessions

Readme

opencode-zellij-agent-comm

An OpenCode plugin for agent-to-agent communication across Zellij panes, tabs, and sessions. It lets multiple OpenCode agents identify themselves, discover each other, send messages, and read screen output, all mediated by the user.

How it works

Each agent is identified by a composite Zellij pane identifier:

s:<session>/p:<pane-id>

For example:

s:zellij-spike/p:56

Session names are URL-encoded inside the identifier, so a session named my session becomes s:my%20session/p:56.

The communication flow:

  1. User asks agent A to identify itself.
  2. Agent A returns its identifier and copies it to the clipboard.
  3. User gives that identifier to agent B.
  4. Agent B can send messages to agent A or read agent A's screen when the user asks.
  5. Sent messages include the sender's identifier, working directory, and git branch so replies can target the sender.

Actions

| Action | Description | |--------|-------------| | identify | Return this agent's Zellij pane identifier and copy it to the clipboard. | | list | Discover other OpenCode agents across Zellij sessions. | | send | Send a message to another agent by pane identifier. | | read | Read the screen output of another agent's pane by identifier. |

Dependencies

Installation

Add the plugin to your opencode.json configuration:

{
  "plugin": ["opencode-zellij-agent-comm"]
}

This can go in your global config (~/.config/opencode/opencode.json) or a project-level config (opencode.json in your project root).

Restart OpenCode to load the plugin. The agent_comm tool will be available to the AI agent automatically.

Usage

Identify

Ask the agent: "What's your pane ID?" or "Identify yourself".

The agent calls identify, which returns an identifier like s:zellij-spike/p:56 and copies it to your clipboard.

List Agents

Ask the agent: "List other agents".

The agent scans Zellij sessions for panes that appear to be running OpenCode and returns identifiers that can be used with send or read.

Send A Message

Ask the agent: "Send a message to s:zellij-spike/p:56".

Messages are prefixed with a sender header:

[From s:zellij-spike/p:48, ~/code/project:main] Your message here

Newlines are preserved by sending the message with Zellij's bracketed paste action, then submitting it with one final Enter.

Read A Screen

Ask the agent: "Read the screen of s:zellij-spike/p:56".

The agent calls Zellij's screen dump action and returns the last requested lines of output. This is raw terminal content and may include UI chrome.

Design

The plugin uses the Zellij CLI rather than a separate message channel:

Agent A (OpenCode)        Zellij               Agent B (OpenCode)
        |                   |                          |
        | paste message     |                          |
        |------------------>|                          |
        |                   | type into target pane    |
        |                   |------------------------->|
        |                   |                          |
        | dump screen       |                          |
        |------------------>|                          |
        |                   | read terminal buffer     |
        |<------------------|                          |
        | screen content    |                          |

Key design decisions:

  • User-initiated only: the tool description tells agents not to send or read unless the user asks.
  • Composite identifiers: s:<session>/p:<pane-id> is enough to target panes across tabs and sessions.
  • Zellij environment identity: identify uses ZELLIJ_SESSION_NAME and ZELLIJ_PANE_ID from the current pane.
  • Discovery by session scan: list uses zellij list-sessions --short and zellij --session <session> action list-panes --json.
  • OpenCode detection: panes are detected from pane_command, title, or a small screen dump fallback.
  • Multiline messages: send uses paste so newlines are delivered as pasted text, then submits with one Enter.
  • Screen reading for responses: read uses dump-screen --full and trims to the requested number of lines.

Limitations

  • The receiving pane must be a terminal pane running OpenCode.
  • send types into the target pane's current input and presses Enter.
  • Raw screen reads can include terminal UI and may omit older scrollback if Zellij no longer has it.
  • Cross-session actions depend on zellij --session <session> action ... being supported by the installed Zellij version.