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

@stratusagent/dashboard

v0.6.0

Published

The Stratus web dashboard: a static, build-step-free UI served by @stratusagent/control-api — roster, live chat, approvals, and settings

Readme

@stratusagent/dashboard

The Stratus web dashboard: the roster, live chat with your agents, pending approvals, and settings — served by @stratusagent/control-api at /.

npm install -g @stratusagent/control-api @stratusagent/dashboard
stratus dashboard

stratus dashboard finds a running daemon (or starts one), mints a single-use sign-in link, and opens your browser at it.

Why it is a separate package

The control API has three consumers and only one of them is a web page. The macOS app (roadmap step 07) is deliberately not a chat app, and a headless VM deployment wants the API with no UI at all. Keeping the UI here means both of those install the API alone, and this package can grow without weighting them.

The API auto-loads it: if this package resolves, the dashboard is served. Pass ui: false to createControlApi to run the API bare on a machine that has it installed anyway.

No build step

The ui/ directory is what ships: hand-written HTML, CSS, and ES modules, no bundler and no framework. What a contributor edits is exactly what a user loads, and there is no build output to go stale against the source.

That is a real constraint, not a preference — it is why the rendering layer is a hundred lines of el() in ui/lib/dom.js rather than a dependency, and why every string reaches the DOM as a text node. There is deliberately no innerHTML helper in this package.

ui/
  index.html        the shell
  styles.css        tokens, light and dark
  app.js            store, router, live stream, sidebar
  lib/              dom helpers, the API client, avatars
  views/            dashboard, agent, settings, plugins

What the screens do

Dashboard — quick stats from GET /health (agents, running turns, stored sessions, waiting approvals, uptime, and what the daemon is serving with which credentials), the approvals panel when anything is parked, recent conversations, and a live activity feed.

Agent — one agent, three tabs. Chat streams a conversation as it happens: text arrives token by token, tool calls appear as status lines, and the transcript is re-read from the daemon when the turn settles so the page never quietly disagrees with what is stored. Activity is the same event stream filtered to that agent. Settings edits the soul — name, persona, provider and model pins — through a validated round-trip.

Settings — provider sign-ins (with a live key check before storing), the default model listed from what those sign-ins can actually reach, and Slack channel tokens.

Plugins — an honest placeholder. Tool packs are roadmap step 06.

Two things the page will not do

  • It never renders a secret. GET /credentials reports that a sign-in exists, its type, and its endpoint. There is nothing to show and nothing to leak.
  • It only talks to its own origin. The page is served with a default-src 'self' content security policy — no external scripts, styles, images, or connections. A local dashboard holding a live session against your daemon is not a place to be relaxed about that.

When the daemon restarts

Sessions live in the daemon's memory, so restarting it signs the browser out and the page says so rather than rendering an empty roster that looks like a fleet that vanished. Run stratus dashboard again. If the socket drops without the daemon dying, the page reconnects on its own with a backoff and re-reads everything it missed.