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

@bloodf/oh-my-agent

v1.7.0

Published

OMP plugin for autonomous long-lived multi-agent collaboration

Readme

An oh-my-pi (OMP) plugin that runs autonomous, long-lived agents as a local daemon. Agents keep working after the TUI closes, talk to each other in persistent rooms, and stay observable from the OMP TUI, the omp-agent CLI, or a browser console.

Why it exists

OMP task agents live inside the interactive session. Close the TUI, they die. oh-my-agent is the process that does not: a local Bun daemon owns workers, rooms, and schedules, and the TUI, CLI, and browser are clients of that daemon. There is no cloud component and no multi-tenant user model. One operator, one daemon, on your machine.

Features

Quick start

Needs Bun ≥ 1.3.14 and OMP (@oh-my-pi/pi-coding-agent ≥ 18.1.0).

omp install @bloodf/oh-my-agent
omp

Run /setup inside omp for a ✓/✗ checklist of what a working install needs, with the fix on every ✗ line; ask the OMP assistant for help and it loads the shipped oh-my-agent-setup skill. The TUI starts the daemon on session start. Widget shows running/parked counts in your OMP theme. /manage opens the manager; every surface is a slash command, and the plugin binds no keys. /cli status runs the shell verb with no PATH. /console opens a menu: Open web UI, Copy URL, or Show URL. /cli console prints the loopback URL explicitly.

Choose Open web UI to open the browser console. Show URL deliberately reveals its operator token; Copy URL copies it without printing it.

Shell CLI is optional. Full path, no export:

~/.omp/plugins/node_modules/.bin/omp-agent status

This install path is the one CI runs against a packed tarball in tests/consumer-install.test.ts.

A default crew ships with the package and starts on the daemon's first boot: mate, the first mate you talk to, plus staff-pm, staff-backend, staff-frontend, and staff-qa, each in its own room and a shared #team. They run on whatever model you have picked as OMP's default (/model), so nothing needs configuring first. Talk to the mate:

/rooms post #bridge @mate add dark mode and fix the flaky login test

It picks the shape (ship a change, or scout and report), briefs the owner, waits on the rooms, checks the evidence, and reports in #bridge. Ten more roles ship as presets that are never seeded: researcher, reviewer, security-reviewer, tech-writer, sre, debugger, test-engineer, designer, release-manager, data-analyst. /preset copies one under your own name; so do omp-agent agent create <name> --preset <preset> and the console's create dialog. The mate hires from the same library when a request needs a role the staff do not cover.

Pick a different model per peer with /edit <name> → Model, which lists every model your credentials can reach, or with the console's agent form. omp-agent models prints the same list. Delete a default peer's file from ~/.omp/agent/oh-my-agent/agents/ and it stays gone; edit it and your edit is kept.

To write your own, follow the hosted getting-started guide, then:

/cli agent create researcher researcher.md
/spawn researcher

Definitions use markdown with YAML frontmatter, the same shape as OMP task agents. model is optional: a fully qualified provider/id when set, the OMP default otherwise.

How it works

The TUI and CLI speak JSON-RPC over a per-profile unix socket. The browser speaks token-gated loopback HTTP and WebSocket. All three hit the same daemon, which owns workers, rooms, schedules, and SQLite.

oh-my-agent runtime

The daemon binds loopback only, in every mode. Going beyond loopback is a proxy in front plus an explicit remote mode. Read remote exposure before exposing anything.

Website and demo

website/ holds the project site and a console demo: the real console from web/, running against a daemon mocked inside the browser, so it needs no install and no daemon. Run it locally:

bun install --cwd web --frozen-lockfile
bun install --cwd website --frozen-lockfile
bun run --cwd website dev    # http://localhost:3300, demo at /console

Details, including the mock and its smoke check, are in website/README.md.

Documentation

| Audience | Start here | |---|---| | Newcomers | Getting started | | Operators | CLI, web console | | Developers | Developer guide, CONTRIBUTING.md | | Architecture | ARCHITECTURE.md | | Decisions | ADRs | | Security | SECURITY.md, remote exposure |

Community files: SUPPORT.md, GOVERNANCE.md, CODE_OF_CONDUCT.md. Brand assets: assets.

Newcomers

Who this is for. People already using OMP who want agents that outlive a TUI session. Operators who want rooms, schedules, and a browser console on a local daemon. Contributors who will treat claims as things that need tests.

What you need. Bun ≥ 1.3.14, OMP with @oh-my-pi/pi-coding-agent ≥ 18.1.0, and a provider account the daemon can meter. This is a single-operator local plugin. It is not a hosted service and it is not multi-tenant.

First win. Install the plugin, open omp, confirm the widget, paste the researcher definition from the getting-started guide, create it, spawn it, and post in #research. If that loop works, the rest of the operator surface is the same daemon.

Want to help develop it

  1. Setup. Clone, bun install --frozen-lockfile, bun install --cwd web --frozen-lockfile, bun run typecheck.
  2. Tests. bun test for the full suite. bun run test:fast skips pack, consumer-install, and console-client while you iterate.
  3. Read. ARCHITECTURE.md, then CONTRIBUTING.md.
  4. Pick work. Nothing is Ready. Remaining work is Blocked: T-1202, T-1205, T-1403, T-1503. File a bug, or add a task in scripts/gen-delivery-docs.py.

Two rules up front:

  • docs/delivery/ is generated. Author in scripts/gen-delivery-docs.py and run bun run docs. Do not hand-edit the tree.
  • Every new test needs a non-vacuity proof. Revert the production line it covers, watch that test fail, restore it. A test that cannot fail is not evidence.

Status

Runtime, TUI, CLI, and browser console ship in the npm package @bloodf/oh-my-agent. See CHANGELOG.md for the current release and its fixes.

Known limitations:

  • Public ACME issuance in remote exposure is UNVERIFIED. All three proxy recipes were run end to end, but the Caddy and SSH-tunnel runs used an internal CA, so public ACME issuance and renewal remain unproven.

Security

The daemon binds 127.0.0.1 only. Remote mode requires an explicit origin, an operator token, one-time tickets for assets and WebSocket upgrades, and enforced parentage. One operator per daemon: the operator token is not a per-user credential.

Do not open a public issue for a vulnerability. Use GitHub's private reporting: Report a vulnerability. Details in SECURITY.md.

License

MIT. Decision record: ADR-010.