korvid v0.2.0¶
Operational context, without surrendering control. This release adds a navigable Kubernetes relationship graph, a bounded session timeline, read-only Prometheus/Loki investigation, MCP 2.0 support, Homebrew distribution, and substantial large-cluster performance work.
Install or upgrade¶
For a new install:
After the generated tap pull request is merged, Homebrew installs the TUI and agent stack on macOS or Linux without relying on the system Python:
The Homebrew formula deliberately excludes the MCP HTTP server. Install
korvid[mcp] or korvid[all] from PyPI when MCP is required.
| install | adds |
|---|---|
korvid==0.2.0 |
base TUI |
korvid[agent]==0.2.0 |
embedded agent |
korvid[mcp]==0.2.0 |
MCP server |
korvid[agent,observability]==0.2.0 |
agent with Prometheus/Loki tools |
korvid[mcp,observability]==0.2.0 |
MCP with Prometheus/Loki tools |
korvid[all]==0.2.0 |
agent, MCP, and observability |
korvid[all,entra]==0.2.0 |
all features plus Entra ID auth |
Python 3.11–3.13 is supported on Linux, macOS, and Windows.
Relationship graph¶
Press g on a resource to open a bounded operational graph assembled from
Kubernetes facts rather than model inference. It connects:
- owners and owned resources;
- workloads, selectors, Pods, Services, and EndpointSlices;
- Ingress and Gateway API backends;
- volumes and PVCs;
- ConfigMap and Secret references without reading Secret values;
- PDB selectors and node placement.
Every edge records its evidence and whether it is declared, observed, or inferred. Missing APIs, missing RBAC, unresolved references, cycles, and traversal caps remain visible, so an incomplete graph never masquerades as proof that no dependency exists.
Bounded session timeline¶
Press T to inspect what happened during this process:
- accepted watch
ADDED,MODIFIED, andDELETEDdeltas; - projected and redacted Kubernetes Warning Events;
- context-switch start, completion, and failure;
- write intent and outcome after the matching durable audit append succeeds.
The timeline is bounded by entry count and encoded bytes, partitioned by context epoch, and filterable by epoch, source, and selected resource. Old context rows may be inspected but cannot navigate into a same-named resource in the current cluster. Cluster-authored text is bounded and rendered literally.
Read-only observability¶
The optional observability extra adds bounded query_metrics and
search_logs tools for Prometheus and Loki to the agent or MCP surface; it has
no standalone base-TUI panel. They use a closed metric catalogue and escaped
Kubernetes scope rather than arbitrary model-authored PromQL or LogQL.
Credentials are resolved at call time, results are capped and masked, and the
tools are absent when no backend is configured.
MCP 2.0¶
The MCP adapter now uses the 2.x SDK and explicitly threads request context
through handler dispatch. Tool failures remain in-band and the write approval
gate is verified through a real Streamable HTTP round trip. Existing
korvid --mcp usage remains the same; environments that pin korvid's transitive
MCP dependency should recreate or upgrade the tool environment.
Performance¶
The 1,000-Pod update path now:
- memoizes stable rendered rows;
- avoids re-seating an unchanged cursor;
- batches visible cell refreshes;
- keeps bucket order stable until the key set changes;
- caches AGE strings for their validity window.
The corrected performance report includes the full round-robin 2×2 comparison and clearly separates table-update passes, row rebuilds, and display refreshes. See docs/performance.md.
Supply chain and release hardening¶
- Pre-commit and CI guards reject private mirror hosts in
uv.lockand resolution-redirecting uv configuration. - A dedicated Relock workflow can produce a PyPI-only lock when a local machine cannot reach PyPI directly.
- Release build requirements are exactly pinned and hash constrained.
- The Homebrew formula is generated from the verified PyPI-only lock.
- Wheel, sdist, checksums, SBOM, offline bundles, and Sigstore provenance are produced from one reviewed build.
Safety invariants¶
This release does not relax the write boundary:
- every write still requires a fresh user confirmation;
- RBAC, UID preconditions, context checks, and server dry-run remain in place;
- audit logging remains fail-closed;
- inferred graph edges and timeline entries are advisory and never approve or block a write by themselves;
- Secret values are never read to construct graph edges.
Verify¶
set -eu
gh release download v0.2.0 --dir dist/v0.2.0
gh attestation verify dist/v0.2.0/korvid-0.2.0-py3-none-any.whl \
--repo hellices/korvid
gh attestation verify dist/v0.2.0/SHA256SUMS --repo hellices/korvid
(cd dist/v0.2.0 && shasum --algorithm 256 --check SHA256SUMS)
An SBOM for the full dependency set ships with the release.
Known limits¶
- The graph is intentionally incomplete when APIs or permissions are missing; it is not a causal or outage-prediction engine.
- The timeline exists only for the current process and is not persistent multi-user history.
- Homebrew excludes MCP; use the PyPI extras for the HTTP server.
- Uninstalling korvid leaves configuration, audit records, cached logs, and keyring credentials in place. Cleanup is explicit in the release runbook.
Report vulnerabilities privately through SECURITY.md, not a public issue.