Land the rvAgent (vendor/ruvector/crates/rvAgent/) integration research
dossier and update both the Claude Code and Codex plugins so future
operators have a discoverable entry point for prototyping agentic flows
on top of RuView's existing sensing pipeline + RVF cognitive containers.
Added:
- docs/research/rvagent-rvf-integration/README.md
Full integration thesis: rvAgent's 8 crates + 14 middlewares share
RVF as their state-persistence format with RuView's existing
v2/crates/wifi-densepose-sensing-server/src/rvf_container.rs. Three
shippable touchpoints (each independent):
1. Two new RVF segment types (SEG_AGENT_STATE = 0x08,
SEG_DECISION = 0x09) so rvAgent sessions and RuView sensing
sessions interleave in one witness-bundle-attestable blob
2. BfldEvent → ToolOutput shim — agent reads BFLD events as
tool context with no new IPC
3. cog-* subagent registration under a queen-agent router
Open questions: workspace inclusion path, sync/async adapter
placement, privacy-class composition with rvagent-middleware
sanitizer, Soul Signature ↔ SoulMatchOracle bridge, MCP surface.
Proposed next: ADR-124 before scaffolding wifi-densepose-agent.
- plugins/ruview/skills/ruview-rvagent/SKILL.md
New Claude Code skill exposing the integration surface, links to
the research doc, and lists the three shippable touchpoints. Skill
description tuned so Claude auto-discovers it for queries like
"wire rvAgent into RuView" or "operator agent reacting to BFLD."
- plugins/ruview/codex/prompts/ruview-rvagent.md
Codex counterpart prompt with trigger phrasing, reading order,
same three touchpoints + open questions, and the ADR-124 next step.
Modified:
- plugins/ruview/.claude-plugin/plugin.json
Version 0.1.0 → 0.2.0; description extended to mention "BFLD
privacy layer" and "rvAgent + RVF agentic flows".
- plugins/ruview/codex/AGENTS.md
Prompt table grows one row: `ruview-rvagent` for the new prompt.
No code changes; no test impact.
Co-Authored-By: claude-flow <ruv@ruv.net>
|
||
|---|---|---|
| .. | ||
| README.md | ||
README.md
rvAgent + RVF integration for agentic flows in RuView
Status: Research (Exploration) — Pre-Proposal Date: 2026-05-24 Author: ruv
TL;DR
vendor/ruvector/crates/rvAgent/ ships a production-grade Rust AI-agent framework with eight composable crates (rvagent-core, -middleware, -tools, -subagents, -backends, -a2a, -acp, -mcp, -cli). The framework already speaks RVF cognitive containers as its native state-persistence and inter-agent transport. RuView already uses RVF in v2/crates/wifi-densepose-sensing-server/src/rvf_container.rs.
Integration thesis: the two systems share a serialization substrate. Wiring rvAgent swarms into RuView turns the existing sensing pipeline into the substrate that an agentic flow can read from, reason about, and respond to — without writing a new agent runtime.
Concrete value:
- Operator-facing agents that interpret BFLD / pose / vitals events live ("the kitchen has had no presence for 6 h but the kettle stayed on — page the carer").
- In-process subagent coordination for the multi-cog Cognitum Seed appliance —
cog-pose-estimation,cog-person-count,cog-ha-matter, and the new BFLD pipeline can negotiate via rvAgent's CRDT state merging instead of ad-hoc IPC. - Witness chains (ADR-028 / ADR-110) get an upstream consumer — rvAgent's audit-trail middleware persists per-decision attestations into the same RVF container an operator already verifies.
- Local SONA learning — rvAgent's 3-loop adaptive learning slots in alongside the per-home RuVector thresholds already proposed in ADR-116, with the same in-RAM-only privacy posture BFLD enforces (ADR-118 I2).
1. What rvAgent ships
| Crate | Role | Key types |
|---|---|---|
rvagent-core |
State machine + COW state cloning + budget tracking | AgentState, Message, AgiContainer, Arena, Budget, Graph |
rvagent-middleware |
14 built-in middlewares (security, witness, sanitizer, sona, hnsw) | PipelineConfig, build_default_pipeline() |
rvagent-tools |
Tool definitions + dispatch | Tool, ToolInput, ToolOutput |
rvagent-subagents |
Spawn isolated subagents with O(1) state clone | Subagent, CRDT merge |
rvagent-backends |
LLM provider abstraction (Anthropic, OpenAI, local) | Backend trait |
rvagent-mcp |
MCP server integration | MCP-style tool registry |
rvagent-a2a / -acp |
Agent-to-agent transport, agent communication protocol | wire format |
rvagent-cli |
Operator CLI | argv parsing |
Selling points relevant to RuView:
- O(1) state cloning via
Arc→ can spawn one subagent per sensing zone without copying gigabytes of context. - Parallel tool execution → multiple sensor queries (BFLD presence, vitals BPM, pose) issued in parallel from one rvAgent decision step.
- Path confinement + env-var sanitization → operator-facing agents that touch the host filesystem (e.g., reading
data/recordings/) stay sandboxed. - Witness chains in
rvagent-middleware::witness→ already RVF-formatted; round-trips cleanly with ADR-028.
2. What RVF already does in RuView
v2/crates/wifi-densepose-sensing-server/src/rvf_container.rs defines the on-disk container format used for:
- ADR-110 witness attestations (
SEG_MANIFEST,SEG_META). - Soul Signature graphs (
docs/research/soul/specification.md§3). - BFLD class-1 (derived) frames once the operator opts into research mode (ADR-118 §1.4).
Each RVF blob is content-addressed (BLAKE3 of the canonical byte representation) and carries a typed segment manifest. The format is intentionally extension-friendly — segment types are u8 enums, new types can land without breaking older readers.
3. The integration surface
Three concrete touchpoints, each shippable independently.
3.1 RVF as the rvAgent ↔ RuView wire
rvAgent's AgiContainer (rvagent-core/src/agi_container.rs, 627 LOC) already produces RVF-compatible blobs as its persistent state format. RuView only needs to define two segment types in rvf_container.rs:
SEG_AGENT_STATE = 0x08— serializedrvagent_core::AgentState(the cloned-on-write tree fromcow_state.rs).SEG_DECISION = 0x09— a single agent decision step: tool calls issued, outputs received, witness signature.
With these two segments, an rvAgent session and a RuView sensing session can interleave entries in the same RVF blob. The witness-bundle script (ADR-028) iterates segments by type, so it would attest both halves with one signing pass.
3.2 BFLD events as rvAgent tool inputs
wifi-densepose-bfld::BfldEvent (iter 13) is already JSON-serializable via to_json(). Wrapping it as an rvagent_tools::ToolOutput is a 20-line shim: the agent issues a read_bfld_state() tool, the runtime returns the latest event JSON, the agent reasons over it. The full event surface (presence/motion/count/identity_risk/zone_id) becomes available as agent context without any new IPC.
BfldEvent → ToolOutput mapping:
impl From<BfldEvent> for ToolOutput {
fn from(e: BfldEvent) -> Self {
ToolOutput::json(e.to_json().expect("BfldEvent JSON"))
}
}
3.3 cog-* as rvAgent subagents
cog-pose-estimation, cog-person-count, cog-ha-matter, and (proposed) cog-bfld already share a packaging convention (ADR-100). Each cog can register as a subagent with rvAgent's hub: the cog implements the Subagent trait, exports its tool surface, and inherits the parent agent's CRDT state. The queen agent (rvagent-queen.md persona) routes operator queries across the cog mesh.
Concrete example:
- Operator query: "is grandma awake yet?"
- Queen agent fans out to:
cog-bfld(presence in bedroom),cog-quantum-vitals(HR baseline shift),cog-pose-estimation(sitting/standing transition). - Each cog returns within budget; queen synthesizes the answer; witness chain logs the decision for compliance audit.
4. Open questions
- Workspace inclusion: is
vendor/ruvector/crates/rvAgent/already on the v2 workspace path, or does it need to be added as a path dep underwifi-densepose-bfld/ a newwifi-densepose-agentcrate? - Async runtime: rvAgent backends are tokio-based. The BFLD
Publishtrait is intentionally sync (iter 22). A small adapter (syncPublish↔ asyncBackend) probably belongs in awifi-densepose-agentcrate, not in BFLD itself. - Privacy class composition: what's the rvAgent equivalent of BFLD's
PrivacyClass?rvagent-middleware::sanitizerstrips at the tool-output boundary; should it consumePrivacyClassfrom the originating BFLD event so the agent never even sees a class-3 identity field? - Soul Signature interaction: rvAgent's
SoulMatchOracleintegration (ADR-121 §2.6) could be the bridge from the Soul Signature graph (docs/research/soul/) to the agent decision layer. Worth a dedicated sub-section. - MCP:
rvagent-mcpexposes tools to external MCP clients. Should the BFLDBfldPipelineHandle::sendsurface land as an MCP tool here, or stay private to in-process rvAgent flows?
5. Proposed next steps (decision deferred)
- D1: Open ADR-124 — "rvAgent + RVF integration for RuView agentic flows" — capturing the segment-type assignments, the cog-subagent contract, and the privacy-class composition rule.
- D2: Scaffold
v2/crates/wifi-densepose-agentwith the sync ↔ async adapter and one example tool (read_bfld_state). - D3: Add
SEG_AGENT_STATEandSEG_DECISIONtorvf_container.rsas#[cfg(feature = "agent")]segments so the v0 ship doesn't pull rvAgent's transitive deps by default. - D4: Land a one-page demo in
examples/agent-bedroom-check/showing the queen-agent flow end-to-end against theBfldPipelineHandle.
6. References
- rvAgent:
vendor/ruvector/crates/rvAgent/README.md,rvagent-core/src/agi_container.rs,rvagent-middleware/docs/UNICODE_SECURITY.md - Agent personas:
vendor/ruvector/crates/rvAgent/.ruv/agents/{rvagent-coder,rvagent-queen,rvagent-tester,rvagent-security}.md - RVF container:
v2/crates/wifi-densepose-sensing-server/src/rvf_container.rs - ADR-028 (witness):
docs/adr/ADR-028-esp32-capability-audit.md - ADR-100 (cog packaging), ADR-110 (witness chain), ADR-116 (cog-ha-matter)
- ADR-118 (BFLD):
docs/adr/ADR-118-bfld-beamforming-feedback-layer-for-detection.md - Soul Signature:
docs/research/soul/specification.md - BFLD impl branch:
feat/adr-118-bfld-impl, currently at iter 25 (e8b4fdbc8)