Files
ruvnet--RuView/harness/ruview
ruv d46eb8a4b2 fix(npm): address 10 verified review findings in harness + rvagent before 0.2.0 publish
harness/ruview (@ruvnet/ruview):
- guardrails: digit gate now sees numbers inside code spans; F1-style
  metric tokens followed by ':' or a nearby number are no longer scrubbed
  (fail-open regressions in the honesty gate)
- mcp-server: tools/call requests serialize through a FIFO promise chain
  (hardware/mutating tools never overlap) while ping/tools/list stay
  immediate; stdin close drains in-flight responses before exit
- tools: which() no longer memoizes negative lookups

tools/ruview-mcp (@ruvnet/rvagent):
- index: realpath invoked-directly guard — library import no longer
  connects a stdio transport to the consumer's process
- http-transport: explicit allowedOrigins is exact-match only (localhost
  any-port convenience applies only with no configured allowlist);
  session map gains maxSessions=64 + 5min idle TTL sweep
- train-count: job records persist the child pid and reconcile stale
  'running' status after a server restart (exit-code marker or dead pid)
- config: cog binary candidates ordered by process.arch

.github/workflows/ruview-npm-release.yml: port the full ADR-265 D1 gate
(version-literal check, unpacked-size budget, tarball-install smoke test)
from npm-packages.yml so the publish path enforces what the header claims.

Tests: harness 30→36, rvagent 99→112, all passing.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-07-02 09:58:00 -04:00
..

npx @ruvnet/ruview — RuView WiFi-sensing operator harness

An AI agent harness that knows how to operate RuView (WiFi-DensePose): onboard a newcomer, provision an ESP32 CSI node, calibrate a room, train pose models, and — crucially — refuse to overstate accuracy. Minted from the RuView monorepo via metaharness and hardened per ADR-182.

WiFi sensing infers coarse pose/presence/breathing from Channel State Information. It is not a camera. Every accuracy number this harness emits must be MEASURED against a baseline — that rule is enforced in code (ruview_claim_check).

Quick start

npx @ruvnet/ruview                       # onboard — pick a setup path
npx @ruvnet/ruview claim-check --file REPORT.md   # the honesty guardrail (non-zero exit on untagged claims)
npx @ruvnet/ruview verify                # run the deterministic proof (VERDICT: PASS)
npx @ruvnet/ruview doctor                # self-check (tools + optional kernel/host)
npx @ruvnet/ruview --help

The operator tools are pure Node and run with zero install weight — the package has no dependencies at all (ADR-263 O3). doctor / install can additionally use @metaharness/kernel + a host adapter if you install them (npm i @metaharness/kernel @metaharness/host-claude-code); everything else runs without them.

Tools (ruview_*)

Exposed both as CLI verbs and as an MCP server (npx @ruvnet/ruview mcp start):

Tool What it does
ruview_onboard Pick docker-demo / repo-build / live-esp32; print the next command
ruview_claim_check Lint text for untagged / overstated accuracy claims (guardrail)
ruview_verify Run verify.py deterministic proof → VERDICT
ruview_node_monitor Assert CSI is flowing on an ESP32 (read-only)
ruview_calibrate ADR-151 room pipeline (baseline→enroll→train-room→room-watch)
ruview_node_flash Build+flash firmware (Windows/ESP-IDF; mutating, guarded)

Every tool is fail-closed: missing repo / python / binary / port → an honest negative, never a fabricated success.

Skills

Host-neutral playbooks in skills/ (onboard, provision-node, calibrate-room, train-pose, verify). npx @ruvnet/ruview skill <name> prints one.

Use as a Claude Code MCP server

The bundled .claude/settings.json registers the ruview MCP server (npx -y @ruvnet/ruview mcp start). Drop this package's .claude/ into a repo, or run npx @ruvnet/ruview install --host claude-code.

Hosts

claude-code (bundled), and via metaharness host adapters: codex, opencode, copilot, pi-dev, hermes, rvm, github-actions.

License

MIT © ruvnet