Files
ruvnet--RuView/plugins/ruview/docs/adrs/0001-ruview-plugin-contract.md
T
ruv 8ff7c2c35a feat(plugins): RuView Claude Code + Codex marketplace plugin
Add `plugins/ruview` — an end-to-end toolkit for working with RuView
(WiFi-DensePose) from Claude Code, mirrored as Codex prompts.

Marketplace: `plugins/.claude-plugin/marketplace.json` (one plugin, `ruview`).

Skills (9): ruview-quickstart, ruview-hardware-setup, ruview-configure,
ruview-applications, ruview-model-training, ruview-advanced-sensing,
ruview-cli-api, ruview-mmwave, ruview-verify — shell-first (cargo / python /
idf.py / docker / node), no claude-flow MCP dependency.

Commands (7): /ruview-start, /ruview-flash, /ruview-provision, /ruview-app,
/ruview-train, /ruview-advanced, /ruview-verify.

Agents (3): ruview-onboarding-guide, ruview-config-engineer,
ruview-training-engineer.

Codex mirror: codex/AGENTS.md + codex/README.md + codex/prompts/*.md (full
command parity, enforced by scripts/smoke.sh).

Docs: docs/adrs/0001-ruview-plugin-contract.md (Proposed). Verification:
scripts/smoke.sh (13 structural checks). Provisioning docs reflect the full
`provision.py` flag set (TDM mesh, edge tiers, vitals, hop channels, Cognitum
Seed, swarm intervals) and the issue #391 NVS-namespace-replace gotcha.

Verified: `claude plugin validate` (plugin + marketplace), loads via
`claude --plugin-dir`, smoke 13/13, and confirmed against an attached ESP32-S3
on COM8 running the RuView CSI firmware (live adaptive_ctrl + csi_collector
serial output).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-11 17:39:16 -04:00

5.7 KiB

ADR-0001 — ruview plugin contract

  • Status: Proposed
  • Date: 2026-05-11
  • Scope: plugins/ruview (and the enclosing plugins/.claude-plugin/marketplace.json)

Context

RuView (WiFi-DensePose) is a large dual-codebase project (Rust v2/, Python archive/v1/, ESP32 firmware, 96 ADRs). Newcomers and operators repeatedly re-derive the same workflows: spin up the Docker demo, flash and provision an ESP32, run a sensing application, train a pose model, run the witness verification. We want those workflows packaged as a single discoverable Claude Code plugin (and mirrored for Codex), spanning practical → advanced.

Decision

  1. One mega-plugin, marketplace-listed. A single plugin ruview under plugins/ruview/, listed by plugins/.claude-plugin/marketplace.json (marketplace name ruview). No sub-plugins; the breadth is organized by skill instead.

  2. Directory contract.

    plugins/.claude-plugin/marketplace.json
    plugins/ruview/.claude-plugin/plugin.json        # name, description, version, author, homepage, license, keywords — NO skills/commands/agents arrays
    plugins/ruview/skills/<name>/SKILL.md            # frontmatter: name, description, allowed-tools
    plugins/ruview/commands/<name>.md                # frontmatter: description (+ argument-hint)
    plugins/ruview/agents/<name>.md                  # frontmatter: name, description, model
    plugins/ruview/docs/adrs/0001-ruview-plugin-contract.md
    plugins/ruview/scripts/smoke.sh                  # structural contract
    plugins/ruview/codex/AGENTS.md + codex/prompts/*.md   # Codex mirror
    plugins/ruview/README.md                         # Compatibility + Namespace coordination + Verification + ADR sections
    

    Skills/commands/agents are auto-discovered from the directory tree — they are deliberately not enumerated in plugin.json.

  3. Shell-first skills. Skills drive RuView's own tooling — cargo, python, idf.py (via the Windows Python-subprocess pattern in CLAUDE.local.md), docker, node scripts. allowed-tools is limited to core tools (Bash Read Write Edit Glob Grep); no mcp__claude-flow__* dependency and no wildcard tools. The only external CLI referenced is npx @claude-flow/cli@latest security scan, and only as an optional step for security changes.

  4. Namespace. The plugin claims the ruview-* namespace for skills (ruview-quickstart, ruview-hardware-setup, ruview-configure, ruview-applications, ruview-model-training, ruview-advanced-sensing, ruview-verify), commands (/ruview-*), and agents (ruview-*). It writes to no claude-flow memory namespace. Coexists with the ruflo marketplace with zero overlap (ruview-* vs. ruflo-*); if both are present, defer to ruflo-agentdb ADR-0001 §"Namespace convention".

  5. Codex mirror — full command parity. Every /ruview-* command (ruview-start, ruview-flash, ruview-provision, ruview-app, ruview-train, ruview-advanced, ruview-verify) has a matching codex/prompts/<name>.md; codex/AGENTS.md carries the project rules and codex/README.md documents installation. The mirror covers the operator-facing commands in full; the additional skills (ruview-quickstart, ruview-hardware-setup, ruview-configure, ruview-applications, ruview-model-training, ruview-advanced-sensing, ruview-cli-api, ruview-mmwave, ruview-verify) and agents have no Codex equivalent — their knowledge is folded into AGENTS.md and the prompt files. The smoke script enforces command↔prompt parity.

  6. Compatibility surface. Targets the ruvnet/RuView / wifi-densepose repo layout (v2/crates/, firmware/esp32-csi-node/, archive/v1/, scripts/, docs/adr/). Hardware docs default to ESP32 on COM8 and tell the reader to confirm the port.

  7. Smoke contract (scripts/smoke.sh, ≥12 checks): marketplace.json valid + lists ruview; plugin.json has name/description/version/keywords and does not contain skills/commands/agents arrays; every skills/*/SKILL.md has name + description + allowed-tools; no wildcard (*) in any allowed-tools; the expected skill set is present; every commands/*.md has a description; every agents/*.md has name + description + model; README contains a ## Compatibility section and a Namespace coordination block; this ADR exists with Status: Proposed; codex/AGENTS.md and codex/prompts/*.md exist and every commands/<name>.md has a matching codex/prompts/<name>.md (command↔prompt parity); nothing is misplaced under .claude-plugin/.

Consequences

  • Good: one claude --plugin-dir ./plugins/ruview gives newcomers and operators the whole RuView workflow surface; no MCP-server prerequisite; Codex users get the same operator commands; the smoke script makes drift visible.
  • Cost: a mega-plugin means coarser install granularity (you get all 9 skills or none); the Codex mirror must be kept in sync by hand (the smoke script checks command↔prompt presence parity, not content parity); a skill stem (ruview-verify) collides with a command stem — tolerated by Claude Code (both resolve), but claude plugin details lists it twice.
  • Follow-ups: if the skill set grows past comfortable browsing (it's at 9), revisit the "one mega-plugin" decision and split by lifecycle (ruview-edge, ruview-train, …); add a content-parity lint between commands and Codex prompts; consider renaming /ruview-verify to drop the skill/command stem collision; consider pinning a tested claude-flow CLI minor for the security-scan step if that step becomes load-bearing; verify the underlying RuView command flags (sensing-server --help, gcloud-train.sh, provision.py) against the live tree rather than from README/scripts.