Releases: sarkar-ai-taken/riva
Release list
v0.3.20 — link to rivalabs.ai by default, multi-server links
Pairs with Riva Server 0.1.0, the first hosted release at https://rivalabs.ai.
Links to rivalabs.ai by default
riva link start with no URL pairs with the hosted service; the web Settings panel is prefilled with it. RIVA_DEV=1 defaults to a local server, RIVA_SERVER_URL points anywhere. The community ping default moved to rivalabs.ai as well.
Link one machine to several Riva Servers
riva link start <url> adds a server instead of replacing it. Each link keeps its own API key and sync cursors; sync, riva fleet, the heartbeat daemon and riva link agents fan out to every linked server, and one being down never blocks the others. riva link status lists them, riva link unlink <url> removes one, --all removes every link. Settings shows a card per server plus an "Add another server" form. ~/.riva/server-link.json moves to a versioned multi-link layout; older single-link files are read as-is and upgraded on next save.
riva fleet on the linked path
When linked, pushes authenticate with the pairing-flow API key and file under the linked tenant. The legacy client-key path is used only for an explicit non-linked --server. Link config is reloaded per push so heartbeat sync cursors are never rolled back.
Machine identity on register
riva link start sends machine_name and machine_id with each registered agent, so the server files it on the heartbeat's device row. No more duplicate "frozen" agent rows.
Fixes
A corrupt server-link.json reads as not linked instead of raising. riva link start against a non-Riva host no longer dumps HTML, and says how to point at your own server when the hosted default is unreachable. riva link status no longer reports "Last synced: never" after a successful sync. Removed the scratch_mock_server.py stub.
See HISTORY.md for full details. PR: #39
v0.3.19 — riva link pairing & fleet roll-up
riva link — pair a machine with a Riva Server from the browser
Ask to pair, approve the code after signing in, done. Stable machine-id identity, revocable credentials (riva link unlink invalidates the key server-side).
Automatic roll-up sync (every 30s once linked)
Agents + lifecycle events, HMAC-verified audit log, forensic session metrics, per-model usage rollups, security findings, and consent-gated approximate location for the fleet map.
Community ping convergence
riva ping targets your linked server; pinged-and-linked machines dedupe to a single map presence.
Web dashboard
Link bubble on Settings until connected, all tabs preload, usage table properly sorted with honest n/a rows.
Usage statistics fixes
New parsers for Gemini CLI, OpenCode, and Cline; Claude Code and Codex CLI parsers updated for current on-disk schemas (both previously read 0 tokens).
See HISTORY.md for full details. PR: #38
v0.3.17 — Claude Desktop detector, lazy TUI, tray fix
Highlights
New: Claude Desktop detector
Riva now detects the Claude Desktop Electron app alongside the existing Claude Code CLI detector. Case-sensitive matching (Claude vs claude) keeps the two cleanly separate. Reads claude_desktop_config.json (MCP servers + preferences, secrets filtered) and parses skills from local-agent-mode-sessions/skills-plugin/*/*/skills/*/SKILL.md.
Perf: lazy-load for TUI dashboard
Skills, Events, and Forensic-summary panes now fetch in a daemon thread behind a _LazyCache — re-renders are instant, first paint shows "Loading…" instead of blocking. parse_session(max_lines=) bounds the trends-path reads to 800 events per session so multi-MB session files don't block the /api/forensic/trends endpoint.
Fix: riva tray crash from broken dist-info
_get_version() now returns "unknown" when importlib.metadata.version("riva") returns None (which can happen on a half-installed dist-info, e.g. with macOS's duplicate-file " 2" suffixes), preventing a confusing TypeError: expected str … not NoneType in subprocess.Popen.
Test coverage
riva.core.skills: 71% → 100%- +15 tests for Claude Desktop detector (incl. the "does not match lowercase
claudeCLI" invariant) - Suite: 694 → 710 passing
Misc
SECURITY.mdemail →security@sarkar.ai
Full changelog: v0.3.16...v0.3.17
v0.3.16
Bug fix: Segfault on macOS from multi-threaded SQLite access
- Fixed segmentation fault caused by sharing a single
sqlite3.Connectionacross the main dashboard thread and theSessionTailerbackground thread introduced in v0.3.15 RivaStoragenow usesthreading.local()for per-thread connections instead of a shared connection withcheck_same_thread=False- SQLite WAL mode continues to handle concurrent file-level access safely; the fix ensures each thread owns its own connection object
Upgrade
pip install --upgrade riva
v0.3.15 — Event Depth, OTLP Receiver, Cross-Agent Skill Export
What's New
Event Stream — Real-time Tool-call Visibility
Three ingestion paths feed into a single unified event store:
- Claude Code hooks —
riva hooks install claude-coderegisters 5 events (SessionStart, PreToolUse, PostToolUse, SubagentStop, Stop) - JSONL tail-watching — automatically watches
~/.claude/projects/and~/.cursor/projects/for new session entries - OTLP HTTP receiver —
POST /otlp/v1/traces|metrics|logsfor any OTel-instrumented agent (LangGraph, CrewAI, etc.)
Web Dashboard — Events Tab
New sidebar tab with real-time event stream, filter controls (agent, type, time range), 3-second auto-refresh, and clickable session IDs that deep-link to forensic session analysis.
Cross-Agent Skill Export
Share skills between workspaces and across 7 AI agent frameworks:
riva skills send frontend-design --to /path/to/project2 --agent cursorSupported targets: Claude Code, Cursor, Codex CLI, Gemini CLI, Kiro, Cline, Windsurf. Also available via the web dashboard Export Skill modal.
Generic Hook Adapter System
riva hooks list/install/uninstall/status — adding hook support for a new agent is one dict in adapters.py. Hooks use absolute Python path and silent-fail (2>/dev/null || true) for resilience.
Bug Fixes
- Skills showing 0 uses due to workspace mismatch in invocation queries
- Hook picking up Python 2.7 on macOS instead of Python 3
- Hook error surfaced in Claude Code when Riva is uninstalled
Full Changelog: v0.3.13...v0.3.15
v0.3.13: Strands agent support
What's New
New Agent: Strands
StrandsDetector— adds support for Strands Agents, AWS's open-source Python agent SDK- Detects Python processes with
strandsin the command line - Parses
~/.strands/config.jsonwhen present - API domain:
bedrock-runtime.amazonaws.com - Riva now supports 15 agent frameworks
Skills — All Agents (v0.3.12 work)
- Skill discovery for Cursor, Continue.dev, Windsurf, Codex CLI, Gemini CLI, and Cline
- Claude Code now also scans
.claude/skills/*/SKILL.mdfor installed skills - Web dashboard Skills tab
See HISTORY.md for full details.
v0.3.12 — Skill Discovery for All Agents
What's new
Skills — All Agents
All supported agents now expose their native workflow concepts as riva skills:
| Agent | Skills concept | Source |
|---|---|---|
| Claude Code | Commands + installed skills | ~/.claude/commands/*.md, .claude/skills/*/SKILL.md |
| Kiro | Hooks + specs | ~/.kiro/hooks/*.md, ~/.kiro/specs/*.md |
| Cursor | Project rules | ~/.cursor/rules/*.mdc, .cursor/rules/*.mdc |
| Continue.dev | Slash commands | slashCommands[] in ~/.continue/config.json |
| Windsurf | Memories + rules | ~/.codeium/windsurf/memories/*.md, .windsurfrules |
| Codex CLI | Instructions | ~/.codex/instructions.md, AGENTS.md |
| Gemini CLI | Instructions | ~/.gemini/GEMINI.md, GEMINI.md |
| Cline | Rules | ~/.clinerules, .clinerules |
Forensics
- Skill tool invocations (
Skilltool_use blocks) in Claude Code sessions are now detected duringriva skills scanand linked to the correct skill
CLI
--mcp-helprenamed to--skill-help- Hub ping removed from
stats,forensics,skills,audit, and other read-only commands — only fires inriva watch,riva scan,riva ping
Bug Fixes
- Tray binary now recompiles automatically on version upgrade via version sidecar file
__init__.pyversion kept in sync withpyproject.toml
Full changelog
See HISTORY.md
v0.3.11 — Skills System, Kiro Agent, TUI Tabs
What's new
Skills System
riva skillscommand group — list, scan, add, share, export, import- Track slash-command workflows with usage count, success rate, backtrack rate, avg token cost
- TOML-based definitions:
~/.riva/skills.toml(global) and.riva/skills.toml(workspace) - Auto-discovery from Claude Code
~/.claude/commands/*.mdand Kiro hooks/specs - Forensic linkage —
/commit,/review-pr, etc. auto-detected in session JSONL
Kiro Agent Support
- New
KiroDetectorfor AWS's Kiro AI IDE - Matches Electron-based process; parses settings, auth, MCP, hooks, steering files
- Discovers skills from
~/.kiro/hooks/and~/.kiro/specs/
TUI — Skills Tab
- Press
1/mfor Main,2/sfor Skills inriva watch - Non-blocking keypress reader via
termiosbackground thread
Web Dashboard — Skills Tab
- New Skills tab in sidebar (star icon)
/api/skillsendpoint with success% color-coding, tag chips, shared badge
Forensics — Non-Interactive Session Fix
- Sessions from
claude -p "…", headless scripts, and MCP tool calls now show full turns, actions, and token counts - Root cause: content blocks format (
[{"type":"text","text":"..."}]) was not handled alongside plain string prompts
CLI
riva --mcp-help— structured Markdown for AI agent consumptionriva --no-ping— skip automatic hub ping for one invocation- Auto-ping on every command (background daemon thread, consent-gated)
Full changelog
See HISTORY.md for the complete release notes.
v0.3.10 — Web logo + CI fixes
What's new
- Riva logo in web dashboard favicon and sidebar (replaces placeholder "R")
- Grafana dashboard title updated to "RIVA — AI Agent Command Center"
- CI lint fixes
Upgrade
pip install --upgrade rivav0.3.9 — Riva Hub community telemetry
What's new
Riva Hub — Community Map
riva ping— auto-detects running agents, resolves city/country/lat/lon via ip-api.com, and POSTs to the Riva Hub- Opt-in consent — one-time prompt on
riva scanandriva watch - Auto-ping — fires silently in background on every scan/watch session after consent
- All 13 supported agents mapped to canonical hub slugs
Upgrade
pip install --upgrade rivaTry it
riva ping