Skip to content

CLI ↔ Dashboard Coverage Gap Inventory ​

Last updated: 2026-08-24

Methodology ​

Every user-facing capability — ndx orchestration commands, rex / sourcevision / hench package CLI commands, and rex / sourcevision MCP tools — is rated:

  • full — dashboard has a trigger, status view, and configuration surface for this capability
  • partial — dashboard exposes some but not all meaningful facets (read-only view without trigger, trigger without config, or a subset of the CLI's options)
  • none — no dashboard representation at all
  • n/a — intentionally terminal-only or not meaningful inside the dashboard (rationale given)

"User impact" is rated high / medium / low based on how frequently the capability appears in a normal daily workflow.

Coverage was verified against the current viewer (packages/web/src/viewer/views/view-registry.ts, components/sidebar.ts) and server routes (packages/web/src/server/routes-*.ts), including the trigger controls shipped in feat(web): add dashboard trigger controls for CLI commands (/api/commands/*).


Changes since the 2026-04-18 audit ​

The Dashboard Trigger Controls feature closed five of the previous Tier 1–3 gaps:

CommandWasNowShipped surface
ndx analyzenonefull"Run Analysis" button on Overview → POST /api/commands/sv-analyze (lite/full)
ndx syncnonefullPush / Pull / Sync buttons in ndx sync settings → POST /api/commands/sync
ndx recommendpartialfull"Refresh Recommendations" on Suggestions → POST /api/commands/recommend
ndx exportnonepartialExport panel in Commands view → POST /api/commands/export (no --deploy=github flow)
ndx self-healnonepartialSelf-Heal panel in Commands view → POST /api/commands/self-heal + status poll (no live phase/iteration view, no stop control)

One capability regressed: the Analyze/Batch-Import panels (ndx plan proposal review) are no longer reachable — see Orphaned UI surface.

ndx sync is kept in the table above as a record of what shipped at the time. The command, the sync_with_remote MCP tool and the tracker adapters behind them were removed before 1.0.0, so they no longer appear in the inventories below.


Command effects ​

Generated from packages/core/command-effects.js — the same declarations the terminal preflight banner prints and GET /api/commands/manifest serves. Edit the declarations, then run node scripts/build-cli-ui-gap.mjs.

Paths the layout owns are written as tokens: {rex} = .rex (.ndx/rex on the .ndx layout), {hench} = .hench (.ndx/hench on the .ndx layout), {sourcevision} = .sourcevision (.ndx/sourcevision on the .ndx layout), {graview} = .graview (.ndx/graview on the .ndx layout), {config} = .n-dx.json (.ndx/config.json on the .ndx layout), {localConfig} = .n-dx.local.json (.ndx/config.local.json on the .ndx layout), {webPid} = .n-dx-web.pid (.ndx/web.pid on the .ndx layout), {webPort} = .n-dx-web.port (.ndx/web.port on the .ndx layout), {prd} = {rex}/changes/ ({rex}/prd_tree/ on a v1 project), {prdRead} = {rex}/product/ and {rex}/changes/ ({rex}/prd_tree/ on a v1 project).

CommandWritesLLM phases (calls)NetworkTakes
ndx init{rex}/, {hench}/, {sourcevision}/
{config}, .gitignore, .gitattributes
CLAUDE.md, AGENTS.md, .claude/, .agents/, .codex/, .mcp.json
README.md
~/.claude.json (only with --mcp-scope=local)
.git/ (only with --git, or on a TTY when the preflight prompt is accepted)
auth probe ~0-1llm-providerunder a minute
ndx migrate-layout.ndx/
.gitignore, .gitattributes
git commits (only without --no-commit)
nonenoneseconds
ndx migrate.ndx/ (only without --plan or --apply, on a legacy layout and without --dry-run)
{rex}/prd_tree/ (only without --plan or --apply, on a flat-file PRD and without --dry-run)
--out (default ./migration-plan.json) (only with --plan, or without --plan or --apply on a v1 tree)
--summary (default: --out with .md) (only with --plan, or without --plan or --apply on a v1 tree)
{rex}/ (only with --apply, or without --plan or --apply on a v1 tree, and without --dry-run)
placement ~0-N, none with --rules-only
spec draft ~0-N, none with --rules-only
review ~0-N, none with --rules-only or --no-jev-review
none with --rules-only
llm-provider (only without --rules-only)seconds with --rules-only; up to an hour over a large PRD with the model passes
ndx analyze{sourcevision}/classify ~0-N batches of 30 files
zones ~1-2 per batch of 7 zones; more passes with --full
primer ~0-1
narration ~1 per escalated zone
none with --fast
llm-providerunder a minute on a small repo; several minutes with --deep or --full
ndx iso{sourcevision}/iso-map.html
iso-map.html (only with --source=scan on a project that has never been analyzed)
nonenoneseconds; longer with --source=scan on a large repo, which walks the tree
ndx recommend{rex}/acknowledged-findings.json (only with --acknowledge)
{prd} (only with --accept)
nonenoneseconds
ndx plan{sourcevision}/
{rex}/pending-proposals.json
{prd} (only with --accept)
classify ~0-N batches of 30 files
zones ~1-2 per batch of 7 zones; more passes with --full
primer ~0-1
narration ~1 per escalated zone
proposals ~1 per proposal batch
decomposition ~0-1 per oversized proposal
none with --no-llm
llm-providera few minutes — it runs a full analysis first
ndx add{rex}/pending-smart-proposals.json
{prd} (only with --accept or --title, or when accepted at the prompt)
{rex}/execution-log.jsonl
smart add ~1 (none with --title)
consolidation ~0-2
llm-provider (only without --title)seconds to under a minute
ndx refresh{sourcevision}/ (only without --ui-only)
{sourcevision}/dashboard-artifacts.json
the dashboard build (only without --data-only or --no-build)
classify ~0-N batches of 30 files
zones ~1-2 per batch of 7 zones; more passes with --full
primer ~0-1
narration ~1 per escalated zone
none with --fast or --ui-only
llm-provider
localhost (only with --live-server)
a minute to several minutes
ndx worksource files
git commits (only when autoCommit is on, the default)
{hench}/runs/
{prd}
{rex}/execution-log.jsonl
<git-common-dir>/ndx/claims.json
agent ~1 agent session per task
review ~0-1 per task
commit message ~0-1
none with --dry-run
llm-providerminutes per task; --loop runs until the queue is empty
ndx statusnothing (read-only)nonenoneseconds
ndx usagenothing (read-only)nonenoneseconds
ndx claim<git-common-dir>/ndx/claims.json (only on release)nonenoneseconds
ndx start{webPid} and {webPort}
~/.ndx/hub.json
~/.ndx/auth.token
nonelocalhostlong-running server; hub mode returns once registered
ndx install-samplesample-app/
{rex}/changes/
nonenoneseconds
ndx destroy-samplesample-app/
{rex}/changes/
nonenoneseconds
ndx devthe dashboard buildnonelocalhostuntil stopped
ndx web{webPid} and {webPort}
~/.ndx/hub.json
~/.ndx/auth.token
nonelocalhostlong-running server; hub mode returns once registered
ndx ci{sourcevision}/nonenoneminutes
ndx whichnothing (read-only)nonenoneseconds
ndx config{config}, {localConfig}, {rex}/config.json, {hench}/config.json (only when setting a value)
~/.ndx/config.json (only when setting an extensions.<name> value with --user)
auth probe ~0-1llm-provider (only when setting llm.vendor, or with --test-connection)seconds
ndx authnothing (read-only)auth probe ~1llm-providerseconds
ndx exportndx-export/
.gitignore
the n-dx-dashboard branch (only with --deploy=github)
noneremote (only with --deploy=github)seconds to a minute
ndx prdthe --out file (only on export)
{prd} (only on import)
{rex}/.backups/ (only on import, without --no-snapshot)
nonenoneseconds
ndx trust~/.ndx/trust/ (only on accept or revoke)nonenoneseconds
ndx extensions~/.ndx/extensions.json
~/.ndx/extensions/ (only on add or remove)
~/.ndx/ext/<name>/ (only on remove --purge)
noneremote (only on add or remove)seconds; add and remove take as long as npm does
ndx self-heal{sourcevision}/
{prd}
{rex}/acknowledged-findings.json
source files (only without --capture-only)
git commits (only without --capture-only)
{hench}/runs/ (only without --capture-only)
analysis ~several per zone batch, per iteration
agent ~1 agent session per task
llm-providerlong — tens of minutes to hours
ndx pair-programming{prd}
{hench}/runs/
source files
agent ~1 agent session
review ~1-2 reviewer sessions
remediation ~0-1 agent session
llm-providerminutes to tens of minutes
ndx bicker{prd}
{hench}/runs/
source files
agent ~1 agent session
review ~1-2 reviewer sessions
remediation ~0-1 agent session
llm-providerminutes to tens of minutes
ndx validate{prd} (only with --post-merge --repair, or when a fix is accepted at the prompt)nonenoneseconds
ndx fix{prd} (only without --dry-run)nonenoneseconds
ndx healthnothing (read-only)nonenoneseconds
ndx reportnothing (read-only)nonenoneseconds
ndx verifynothing (read-only)nonenoneseconds to two minutes
ndx log{rex}/execution-log.jsonlnonenoneseconds
ndx update{prd}
{rex}/execution-log.jsonl
nonenoneseconds
ndx remove{prd}
{rex}/execution-log.jsonl
nonenoneseconds
ndx move{prd}
{rex}/execution-log.jsonl
nonenoneseconds
ndx reshape{rex}/.backups/
{prd} (only with --accept)
{rex}/archive.json (only with --accept)
proposals ~1-N
merge bodies ~0-N
llm-providera minute to several minutes
ndx reorganize{rex}/.backups/
{prd} (only with --accept or --accept-llm)
proposals ~0-N
none with --fast or --mode=fast
llm-providerabout a minute
ndx prune{rex}/.backups/
{prd} (only without --dry-run)
{rex}/archive.json (only without --dry-run)
consolidation ~0-1 (none with --no-consolidate)llm-providerseconds to a minute
ndx nextnothing (read-only)nonenoneseconds
ndx treenothing (read-only)nonenoneseconds
ndx tree-diffnothing (read-only)nonenoneseconds
ndx graview{graview}/document.json and {graview}/snapshot.json
{graview}/cache/ (only when the PRD has a product layer and the project is a git repository)
{graview}/data/ (only for serve and mcp)
noneremote (only when no graview binary is configured or on PATH)seconds to emit; serve and mcp run until stopped
ndx readinessnothing (read-only)nonenoneseconds
ndx reset{sourcevision}/nonenoneseconds
ndx shownothing (read-only)nonenoneseconds
ndx rex{rex}/ (only for a subcommand that writes)subcommand ~variesllm-provider (only for a subcommand that calls a model)depends on the subcommand
ndx hench{hench}/ (only for a subcommand that writes)subcommand ~variesllm-provider (only for a subcommand that calls a model)depends on the subcommand
ndx sourcevision{sourcevision}/ (only for a subcommand that writes)subcommand ~variesllm-provider (only for a subcommand that calls a model)depends on the subcommand
ndx sv{sourcevision}/ (only for a subcommand that writes)subcommand ~variesllm-provider (only for a subcommand that calls a model)depends on the subcommand

ndx orchestration commands ​

CommandCoverageImpactNotes
ndx workfullhighPer-task Execute button (task detail), "Start" on next-task card, epic-by-epic panel with pause/resume, terminate + throttle/emergency-stop controls
ndx analyzefullhigh"Run Analysis" on Overview (lite/full); --deep not exposed
ndx recommendfullhighSuggestions view + refresh trigger
ndx plan / --acceptpartialhighRegression: smart-add preview + accept-edited work (SmartAddInput), but the proposal-review panel (AnalyzePanel → /api/rex/analyze, /api/rex/proposals*) is only mounted by the orphaned views/analysis.ts
ndx addfullhighSmart-add input with debounced preview, accept-edited flow
ndx statusfullhighRex dashboard + PRD tree
ndx usagefullhighPeriod grouping (day/week/month toggle), per-command breakdown with package filter, and budget alerts by severity — all served by the aggregate /api/token/utilization endpoint
ndx refreshpartialhigh"Refresh Data" panel triggers the data phases live (--data-only --live-server); full UI rebuild still requires the terminal (server must stop)
ndx self-healfullmediumTrigger, status poll, iteration/phase display, and a Stop control that cancels the running loop
ndx exportpartialmediumExport trigger exists; deploy flow not exposed
ndx cifullmediumRun-CI-check action in the Validation view with structured results from --format=json
ndx configfullmediumThree settings pages: Robot Wrangler (vendor, provider and model), Workflow (work settings, templates, CLI timeouts) and Project (analyze/plan settings, feature flags)
ndx authfulllowCredential status chip on Robot Wrangler (GET /api/commands/auth), with re-check
ndx install-sample / ndx destroy-samplefulllowSample App panel in Commands view (packages/web/src/viewer/views/commands.ts) — Install/Destroy buttons, live status polling via GET /api/commands/sample-status, POST /api/commands/install-sample and /api/commands/destroy-sample
ndx pair-programming / bickernonelowExperimental; not yet a dashboard workflow
ndx initn/a—One-time setup; dashboard requires init to exist
ndx start / ndx devn/a—These commands launch the dashboard
ndx version / ndx helpn/a—Footer version + Guide/FAQ views cover this

ndx config — Robot Wrangler view detail ​

  • Local vendor (full): the Robot Wrangler view (packages/web/src/viewer/views/robot-wrangler.ts) adds a "local" vendor alongside Claude/Codex — a Server section with a live status probe, saved server profile chips, host/port fields, and a connection test (model count, latency, tokens/sec); context budget, request timeout and the second-model verifier sit in collapsed advanced rows. Backed by GET/PUT /api/llm/config plus GET /api/llm/local-status, POST /api/llm/local-test, and GET/POST/DELETE /api/llm/local-profiles (packages/web/src/server/routes-llm.ts).
  • Providers and models (full): each vendor offers only the providers hench accepts and a model dropdown over the server's catalog (GET /api/llm/catalog, ?refresh=true to re-fetch). The agent model saves as hench.models.<vendor> through PUT /api/llm/config; the provider saves through PUT /api/hench/config. The page shows the installed CLI version for Claude and Codex but offers no update or install action.

rex package CLI ​

CommandCoverageImpactNotes
rex status / treefullhighPRD tree view
rex nextfullhighNext-task card on Rex dashboard
rex add (manual + smart)fullhighInline add + smart-add
rex update / remove / movefullmediumInline status picker, bulk actions, delete, reparent
rex validatefullmediumValidation view re-fetches /api/rex/validate + dependency graph with cycle detection
rex healthfullmediumHealth gauge on dashboard
rex reorganizefullmediumReorganize panel with preview + apply
rex prunefullmediumPrune preview + confirmation + execute
rex reshapefullmediumReshape action in the Validation view: previews proposals via --dry-run, applies only on explicit confirm
rex fixfullmediumFix action in the Validation view: --dry-run preview, then apply, then automatic re-validation
rex restorefullhighSnapshots/Restore panel on the Rex dashboard (list + restore-with-confirmation) — GET /api/rex/backups, POST /api/rex/restore (routes-rex/restore.ts). The in-app undo for reorganize/prune/reshape/fix
rex verifyfullmediumRequirements page renders coverage + traceability matrix (per-item CRUD deferred to the task detail panel)
rex analyze / importpartialmediumSame orphaned-panel regression as ndx plan
rex usagefullmediumSame coverage as ndx usage
rex reportnonelowJSON for CI; health view covers interactive use
rex facets (MCP facets)partiallowDeferred by decision (2026-08-14). Facet filters exist in the PRD tree. A distribution view was scoped and skipped: facets is MCP-only (no CLI command), no facets are configured in this project, and the panel would render an empty state for most users. Revisit if facet configuration becomes common.
rex migrate-to-md / migrate-folder-tree-filenamesn/a—One-time migrations; terminal-only by design
rex backfill-commit-attributionnonelowRead-only report of commits on the default branch that carry no N-DX-Item / N-DX-Status trailer, grouped by author and month. --json for CI. Terminal-only for now; a coverage panel would belong beside the PRD view
rex mcpn/a—Server plumbing; MCP HTTP endpoints served by the dashboard itself

sourcevision package CLI ​

CommandCoverageImpactNotes
sourcevision analyzefullhighRun Analysis trigger + eight data views
sourcevision pr-markdownfullmediumPR Markdown tab with per-section copy + freshness state
sourcevision validatenonelowNo UI to validate .sourcevision/ outputs; freshness indicator partially covers intent
sourcevision export-pdffullmedium"Export PDF report" beside the Export panel; reports the written path (the viewer sandbox blocks page-initiated downloads)
sourcevision workspacenonelowMulti-repo aggregation has no dashboard concept yet; GET /api/worktrees covers worktrees of the served repo only, and cross-project switching is the 0.7.0 hub's job
sourcevision serven/a—Legacy standalone viewer; superseded by ndx start
sourcevision resetn/a—Destructive; intentionally terminal-only
sourcevision git-credential-helpern/a—Interactive terminal flow
sourcevision mcpn/a—Server plumbing
sourcevision packnonelowInstalls per-user language packs with npm or from an offline bundle; terminal-only for now

hench package CLI ​

CommandCoverageImpactNotes
hench runfullhighExecute buttons + epic-by-epic panel (see ndx work)
hench status / showfullmediumRuns view: history, transcript, token breakdown, files changed
hench configfullmediumWorkflow settings page (GET/PUT /api/hench/config); provider and model live on Robot Wrangler
hench templatefullmediumTemplates view: gallery, apply, save, delete
hench validate-tokensfulllow"Validate token reporting" trigger in the Runs view, beside the per-run token diagnostics
hench recordn/a—Plumbing for the assisted-run skills (/ndx-work, /ndx-capture, /ndx-plan, /ndx-reshape, /ndx-config); reads its token usage from the Claude Code session transcript
hench initn/a—Covered by ndx init

Rex MCP tools (18) ​

MCP tools are AI-assistant-facing; the dashboard need not mirror them 1:1. Coverage below records whether an equivalent human surface exists, since a capability reachable by agents but invisible to humans is an observability gap.

ToolEquivalent UICoverage
get_prd_statusRex dashboard stats + PRD treefull
get_next_taskNext-task cardfull
claim_taskPRD tree shows a claimed · <worktree> chip on a claimed row; no control to take a claimpartial
release_taskHeld claims name the release command in the chip tooltip; no release controlpartial
update_task_statusInline status picker / bulk actionsfull
add_itemAdd-item + smart-addfull
edit_itemDetail panel editingfull
get_itemDetail panelfull
move_itemTree reparentfull
merge_itemsMerge previewfull
get_recommendationsSuggestions viewfull
verify_criteriaRequirements page (coverage + traceability matrix)full
reorganizeReorganize panelfull
healthHealth gaugefull
facetsFacet filters (no distribution view)partial
append_logActivity view (REX → Activity) renders the logfull
get_token_usageToken Usage view (utilization only)partial
get_capabilities—n/a (protocol handshake)

Sourcevision MCP tools (10) ​

ToolEquivalent UICoverage
get_overviewOverview tabfull
get_next_stepsNext Steps panel on Overview (derived steps, any pass) + Suggestions tabfull
get_zone—none — the zone-detail view (views/zones.ts, 2569 lines) exists but is unreachable (see orphaned surface)
get_findingsArchitecture / Problems / Suggestions tabsfull
get_file_infoFiles tabfull
search_filesFiles tab filters + global search overlayfull
get_importsMap tabfull
get_classificationsFiles tab Archetype column (via /api/sv/classifications)full
set_file_archetypeArchetype override control in the Files tab (POST /api/sv/archetype)full
get_route_treeRoutes tabfull

Orphaned UI surface — resolved 2026-08-12 ​

Roughly 2,900 lines of built view code were unreachable; both views are now registered (guarded by tests/unit/viewer/restored-views.test.ts):

  1. views/analysis.ts (AnalysisView) — was never registered after the web-package extraction, leaving POST /api/rex/analyze, /api/rex/proposals*, and /api/rex/batch-import without reachable UI. Now analysis (REX → "Analyze & Import").
  2. views/zones.ts (ZonesView, 2569 lines) — removed from navigation in PR #189 ("obsolete Zones navigation") before PRs #317/#321 invested in expandable zones and a11y, leaving that feature work invisible. Now zones (SourceVision → "Zones" tab).

Server APIs with no UI consumer ​

API surfaceSizeNote
/api/hench/adaptive/*873 lines, 10 endpointsDone 2026-08-13: Adaptive Optimization view (HENCH → Adaptive) consumes all 10 endpoints
/api/rex/requirements/*575 linesDone 2026-08-13: Requirements page (REX → Requirements) renders coverage + traceability; per-item CRUD deferred to the task detail panel
/api/sv/* (all except pr-markdown)8 endpointsViewer reads /data/*.json directly; these serve external/MCP consumers — document as external API, not a UI gap
/api/token/{summary,events,by-command,by-period,budget}5 endpointsNot a UI gap (verified 2026-08-14). utilization returns commands, budget and trend in one response, and the Token Usage view already renders all three — a day/week/month toggle (ndx usage --group parity), a per-command table with package filtering, and budget alerts by severity. These five are the granular/external split of the same data; wiring them separately would duplicate working UI and add redundant requests.
/api/hench/{metrics,metrics/snapshots,memory/history,memory/leaks,runs/health}5 endpointsPanels exist for live memory/concurrency; historical metrics unexposed
/api/rex/{next,stats}2 endpointsDashboard consumes /api/rex/dashboard instead; candidates for removal or documentation

SourceVision full-flow note — trigger shipped 2026-08-12 ​

The SourceVision tabs are gated by zones.enrichmentPass (Architecture ≥ 2, Problems ≥ 3, Suggestions ≥ 4). The Overview now has a "Full analysis" control that runs sourcevision analyze --full (all four enrichment passes) as a background job — POST /api/commands/sv-analyze with full: true returns 202 and progress streams via GET /api/commands/sv-analyze/status (30-minute budget for the LLM passes; the old synchronous path capped out at 3 minutes). Locked tabs unlock automatically as the viewer's data polling picks up the refreshed zones.json. Remaining scope for the feature lives in its second task: surfacing every recommendation/function per tab once data exists.


Priority-ordered gap list ​

Tier 1 — high impact ​

  1. Restore the orphaned AnalysisView — done 2026-08-12: registered as analysis (REX → "Analyze & Import"); ndx plan proposal review is reachable again.
  2. Restore the orphaned ZonesView — done 2026-08-12: registered as zones (SourceVision → "Zones" tab); zone drill-down (get_zone equivalent) is navigable.
  3. ndx refresh trigger — done 2026-08-12: "Refresh Data" panel in the Commands view → POST /api/commands/refresh (spawns ndx refresh --data-only --live-server, a new CLI mode that keeps the running server alive) with phase progress from the [refresh] output and a status poll endpoint.
  4. Full-flow analysis trigger — extend /api/commands/sv-analyze to drive deep/enrichment passes with per-pass progress so all SourceVision tabs unlock from the UI (feeds feature a83b1a2f).

Tier 2 — medium impact ​

  1. Requirements / traceability page — done 2026-08-13 (REX → Requirements: coverage stats + expandable traceability matrix).
  2. Adaptive-optimization page — done 2026-08-13 (HENCH → Adaptive view: metrics, apply/dismiss/lock, settings, overrides, history).
  3. rex fix action — done 2026-08-14 (Validation view, dry-run preview then apply).
  4. rex reshape flow — done 2026-08-14 (preview proposals, apply on confirm).
  5. ndx ci trigger — done 2026-08-14 (async run with structured JSON results).
  6. Token usage depth — closed 2026-08-14, no work needed: the capabilities were already present via utilization (see the API table). The audit had flagged unused endpoints, not missing features.
  7. Self-heal live view — done 2026-08-14: iteration/phase display parsed from loop output, plus a Stop control (new POST /api/commands/self-heal/stop, backed by AbortSignal support added to the foundation exec).

Tier 3 — low impact ​

  1. sourcevision export-pdf control — done 2026-08-14.
  2. set_file_archetype override UI — done 2026-08-12 (Files tab Archetype column with override control).
  3. Facet distribution view — deferred 2026-08-14 with rationale (see the rex CLI table): MCP-only, unconfigured in practice, would render empty for most projects.
  4. ndx auth status chip — done 2026-08-14 (Settings → General).
  5. hench validate-tokens trigger — done 2026-08-14.
  6. Execution-log viewer — done 2026-08-14: REX → Activity renders the full log with event filtering and search.

Intentionally terminal-only (excluded) ​

CapabilityRationale
ndx start / ndx devThese launch the dashboard
ndx init / hench init / rex init / sourcevision initOne-time setup; dashboard presupposes init
ndx version / ndx helpFooter version, Guide + FAQ views
sourcevision resetDestructive, low frequency
sourcevision serveSuperseded by ndx start
sourcevision git-credential-helperInteractive terminal flow
rex migrate-*One-time migrations
rex mcp / sourcevision mcpTransport plumbing; HTTP MCP is served by the dashboard
hench recordSkill-integration plumbing (writes the run record, and the tokens the skill spent)
MCP get_capabilitiesProtocol handshake
/api/sv/* read endpointsExternal/MCP-facing API by design; viewer reads /data/*.json

Released under the Elastic License 2.0.