Meet NanoCo, maintainers of NanoClaw: we raised $12M to give every member of your team a professional assistant →
Skills
Infrastructure Official

clidash

Add a zero-dependency, read-only web dashboard that builds its tabs and tables at runtime from any CLI that lists resources as JSON, pre-wired for NanoClaw's ncl.

What it does

  • Derives one tab per resource and a generic table from any CLI's JSON output
  • Pre-wired for NanoClaw's ncl CLI — groups, sessions, channels, users, roles
  • Agents overview joining groups, sessions, messaging groups, and wirings
  • Message-activity charts read directly from the session DBs
  • Log tail over allowlisted files and a read-only file viewer for skills, CLAUDE.md, and profiles
  • Read-only by construction and zero dependencies — no build step, no NanoClaw source changes

What you'll need

  • NanoClaw installed and running
  • Node ≥ 22.5 (uses node:test and node:sqlite)
  • bin/ncl built (pnpm run build) for ncl resource discovery

Install

/add-clidash

How it works

clidash is a small, read-only web dashboard. You point it at any CLI that can list resources as JSON — NanoClaw’s ncl, docker, kubectl — and it builds the dashboard at runtime: one tab per resource, and a generic table over whatever columns the rows happen to have. A new ncl resource becomes a new tab and a new column becomes a new table column with zero code changes.

It ships pre-wired for ncl and adds four NanoClaw-aware panels, all driven by config. Agents overview shows status cards that join groups, sessions, messaging groups, and wirings, color-coded by recency (green under 15 minutes, amber under 2 hours, red older). Activity reads the session DBs directly for per-session inbound/outbound message totals and a daily series, since ncl has no messages resource. Logs tails the last N lines of allowlisted host log files. Files is a read-only viewer for group skills, CLAUDE.md, and profiles.

It is read-only by construction: the server can only execFile the argv templates in its config. {resource} is the sole substitution, and it is allowlist-validated against the discovered resource set before exec — no shell, no free-form input reaches argv. There is no auth, so the network is the auth boundary; clidash binds 127.0.0.1 by default and you should only ever bind a private interface such as a tailnet IP.

This is distinct from /add-dashboard, which pushes JSON snapshots to a separate npm package. clidash has zero dependencies, no build step, and no push pipeline — it just reads ncl and the session DBs.

Setup

The /add-clidash skill copies the self-contained tool into tools/clidash — the only file change it makes, with nothing in NanoClaw src/ touched and no dependency added. It then creates your local config from the example:

cd tools/clidash
cp clidash.config.example.json clidash.config.json

The example config is pre-wired for NanoClaw with paths relative to the repo root and assumes ncl is built at bin/ncl. If bin/ncl doesn’t exist, build it (pnpm run build) or point clis.ncl.bin at the right path. You can add clidash.config.json to .gitignore to keep install-specific paths out of the repo.

Tests run against a stub CLI, so no real ncl or docker is needed:

npm test
node server.js          # serves http://127.0.0.1:4690

Then open http://127.0.0.1:4690/ to see the Agents overview plus a tab per ncl resource.

Tips

  • Adding a second CLI is config-only — docker is included as a jsonlines example. View plugins under views/<cli>-<view>.js are the only per-CLI code, and they’re optional.
  • To reach clidash from another device, set BIND=<private-ip> (a tailnet address) or bind in config — never a public interface.
  • To run it as a service, wrap node server.js with WorkingDirectory set to tools/clidash in a systemd user unit (Linux) or a launchd plist (macOS), the same way the main NanoClaw service is configured.
  • If Activity, Logs, or Files come up empty, confirm activity.sessionsRoot, logs.dir, and docs.root resolve to your NanoClaw root relative to where you launch node server.js.