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 —
dockeris included as ajsonlinesexample. View plugins underviews/<cli>-<view>.jsare the only per-CLI code, and they’re optional. - To reach clidash from another device, set
BIND=<private-ip>(a tailnet address) orbindin config — never a public interface. - To run it as a service, wrap
node server.jswithWorkingDirectoryset totools/clidashin 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, anddocs.rootresolve to your NanoClaw root relative to where you launchnode server.js.