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-blob-office

v2.3.2

Published

Visualize OpenCode sessions as animated blob characters

Readme

Blob Office

Attribution: This project was inspired by the original Session Character Visualizer concept by @Caffa. The opencode-blob-office npm package is a complete TypeScript rewrite designed specifically for OpenCode's plugin system.

Demo

An OpenCode plugin that visualizes AI coding sessions as animated blob characters in a virtual office.

License

Each session appears as a colored blob with speech bubbles, status animations, and idle eye expressions. Subagents orbit their parents. The viewer runs in a browser via p5.js, connected over WebSocket.

| Agent Lifecycle | Subagents | Error Recovery | Multi-Session | | :---: | :---: | :---: | :---: | | lifecycle | subagents | error-recovery | multi-session |


Installation

Preferred Method (Recommended)

Install via OpenCode's plugin system:

bunx opencode-blob-office install

Or with npx:

npx opencode-blob-office install

This will automatically register the plugin in your OpenCode configuration. Restart OpenCode to activate the plugin.


Features

  • Unified server — single port serves both HTTP viewer and WebSocket
  • Graceful disconnect — blobs fade out on disconnect, viewer reconnects with backoff
  • Idle eye expressions — sleeping blobs occasionally peek, glance, or go half-lidded
  • Real filenames in code panels — editing blobs show actual files being touched
  • File activity tracking — all file-touching tools (read, glob, grep) tracked, not just writes
  • npm packagingbunx opencode-blob-office install / npx opencode-blob-office install with CLI
  • Test infrastructure — bun:test unit/integration suite + Playwright E2E tests
  • Graceful shutdownserverclosing message on SIGINT/SIGTERM so viewer can fade + close

Agent States

| State | Visual | Description | | -------- | ---------------------------------- | ------------------------------------------------------------------ | | Idle | Closed eyes, slow pulse | Finished work, waiting. Subagents removed after 10s. | | Thinking | Expanding ring, sparkles | Processing/generating. Eyes track rhythmically. | | Editing | Code panel with typewriter | Writing/editing files. Panel shows actual filenames. | | Reading | Glasses, book opens/closes | Reading files, searching. Glasses wobble. | | Running | Fast pulse, motion streaks | Executing bash commands. | | Waiting | Nervous shake, bouncing question | Blocked on permission, or supervising subagents. | | Error | X_X eyes, red pulse | Something went wrong. |

Each agent gets a unique hue derived from its session ID. Subagents use parent hue +30°.


Architecture

blob-office.ts          Plugin — hooks into OpenCode events, serves HTML + WebSocket
blob-office.html        Viewer — p5.js canvas, WebSocket client, all rendering
blob-office-mock-server.ts  Mock server for testing
  • Single server on port 2727 (scans up to 2736 if taken)
  • Event-driven via OpenCode hooks (tool.execute.before/after, event)
  • Multiple OpenCode instances sync agents through the same server
  • No bundler, no framework

Development

# Build the plugin (required before local development)
bun run build

# Run all tests
bun run test

# Unit tests only
bun run test:unit

# Playwright visual tests
bun run test:visual

# Mock server for local dev
bun run mock-server

# Regenerate preview GIFs (requires ffmpeg)
bun run preview:generate

Troubleshooting

Viewer doesn't open: Navigate to http://localhost:2727 manually.

Port conflicts: Plugin auto-discovers ports 2727–2736. Check OpenCode logs for [blob-office].

No agents appearing: Check OpenCode logs, run bun install in plugin folder, check browser console.


Releasing

npm version patch   # or minor, major
git push && git push --tags

npm version bumps package.json, commits, and tags atomically. The tag push triggers CI which runs tests and publishes to npm with provenance. Never use git tag manually.


License

MIT — see upstream repository for original license terms.