Repository navigation
Releases: spenceclark/Vessel
Release list
v0.3.1
0.3.1 — 2026-10-02
System One replay between TypeSafe and Ollama, a tidier Compare view, IBM Plex Sans, and winget.
Added
- System One decisions replay between TypeSafe and Ollama 0.35, which serves the same
POST /v1/systemoneAPI: atypesafe-systemonecapture can replay to anyollamabackend
or to anapi.typesafe.aibackend. Credentials come only from the target, so a TypeSafe key
never reaches Ollama. OpenRouter's/api/alpha/decisionsstays same-backend only (#137). - Package-manager install on Windows with winget:
winget install spenceclark.Vessel(#32).
Changed
- Compare hides metric rows that no column has a value for, in every format — for example
TTFT, Tok/s and Stop reason for System One (#137). - For a decision pair, Compare's shared request shows only the parameter diff and
state;
each answer column already carries its questions (#137). - Decision values, confidence and the score scale are shown rounded to 3 places; Raw JSON
keeps full precision (#137). - Choice bars follow the request's criteria order, so Compare columns line up. In the request
detail view the winning option is no longer always the top bar (#137). - The UI font is now IBM Plex Sans, bundled with the app. The previous Inter font never
loaded because of a font-name mismatch, so the UI fell back to the system font (#127). - Dependency bumps: @tanstack/react-query 5.104.0, @tanstack/react-virtual 3.14.13 (#128, #131).
v0.3.0
0.3.0 — 2026-09-19
Tools tab, Anthropic server tools, TypeSafe System One, MCP resources, and two new warnings.
Added
- Tools tab: a request that declares tools gets a
Tools (n)tab with one card per tool —
description, parameter table, and how many times it was called (#86). - Anthropic server-tool blocks (
server_tool_use, web search and web fetch results) render
as cards, with numbered citations and a sources list per message (#88). - Tool call args and tool results that parse to an object render as a readable field list,
with multi-line strings unescaped; Raw JSON still shows the exact bytes (#91). - TypeSafe System One (Jev) support:
typesafe-systemonetraffic — direct/v1/systemoneor
OpenRouter's/api/alpha/decisions— is detected instead of falling toraw, with a
Decisions view (one card per question, probability bars) and same-backend replay (#122). - Two new warnings:
repetitive_outputfor a response stuck in a loop, and
slow_responsefor a non-streamed request slower thanwarnings.slowResponseMs
(default 120s,0disables; editable in the Config panel) (#90). - MCP resources:
vessel://requests/{id}andvessel://sessions/{id}, with
resources/listreturning the most recent requests and sessions (#92). - OpenRouter and TypeSafe in the "Add backend" catalog (#124).
Fixed
- A queued replay whose backend was repointed while it waited is refused with
409 replay_target_changedinstead of sending the old credential to the new
destination (#106). - MCP request reads decode bodies under
capture.maxBodyMbrather than unbounded, and
report truncation withdecodeTruncated(#107). - While a listen-address change is pending restart, the UI/API stays reachable on the
address the process is actually bound to (#112). path_missing_v1only fires for the missing-/v1mistake: an OpenAI SDK path suffix, no
/v1/segment anywhere, and a backendbaseUrlwith no path of its own (#123).- Anthropic server-tool blocks are included in MCP
include=textand full-text search;
encrypted_*fields never reach the flattened text (#89). openai-chatreasoning text under thereasoningkey (e.g. Ollama) is no longer dropped
from the thinking block and search (#80).- Anthropic rate-limit headers are parsed (#108).
- Parameter sweeps on OpenAI Responses replays use
max_output_tokens(#111). - Config validation rejects a backend with
"type": null(#109). - Multi-replay rejects a null variation with
invalid_requestand the offending index,
before dispatching anything (#110).
Changed
v0.2.1
0.2.1 — 2026-09-13
Post-0.2.0 fixes.
Fixed
- Ctrl+C no longer hangs on shutdown, and the startup console output is clearer (#64).
- The live request feed reconnects when the browser's EventSource enters CLOSED instead
of silently going stale (#75). - A backend connection failure logs one clean warning line instead of a YARP stack
trace (#76).
Changed
v0.2.0
0.2.0 — 2026-09-07
Named sessions, multi-replay with scoring, reports, export, and package-manager installs.
Added
- Named sessions: assign requests to a run with
X-Vessel-Session(created on first use),
with a session picker, per-session stats, and session deletion (#29, #41). - Multi-replay: fan one captured request across several models, or one model across
several parameter values, and see every response side by side with per-column metric
deltas (#48). - Scoring: rate any response 1–5 from the Compare view — original included — and a
leaderboard in Reports ranks models and parameter sets by mean score and win-rate (#49). - Reports view: requests, tokens, tok/s, duration, cache efficiency, and warnings by
model/tag/backend, plus a context-growth chart per session or tag (#25, #26). - Export the current filtered request list to CSV or JSONL (#24).
- Replay dialect fix-ups:
max_tokens↔max_completion_tokensis renamed automatically
for OpenAI Chat replays and shown as(auto)in Compare's parameter diff (#28). - Package-manager installs: Homebrew (macOS and Linux) and Scoop (#31, #32).
- Tool calls a model emits as plain text instead of structured output are detected and
flagged (#40). - A hint on 404s from OpenAI-compatible backends when the client's
base_urlis missing
/v1(#57). - README: tagging agents and naming runs from LangChain / LangGraph.
Changed
- Compare is now a grid rather than a fixed pair (a pair is the two-column case); metrics
render as a table across columns (#48). - MCP
search_requestsandget_requestinclude each request's score and replay linkage
(#48, #49). - Config panel: backend cards compacted to two rows with shared explainers (#42).
- macOS unblock steps updated for Sequoia (#39).
The database schema migrates automatically on first start; the additions are additive, so
an older Vessel can still open the file.
v0.1.1
Changelog
All notable changes are documented here. Vessel follows Semantic Versioning.
0.1.1 — 2026-08-30
Post-launch fixes and polish.
Fixed
- Copy-as-curl now emits the correct auth for Anthropic backends (
x-api-key+
anthropic-version) rather than an OpenAIBearerheader — including backends left on
type: auto(#7). - Copy-as-curl targets a reachable host instead of the bind address, so a command copied
while Vessel runs in a container actually connects (#8). - Chrome DevTools'
/.well-known/appspecific/…probe is no longer proxied and captured as
an errored request (#4).
Added
- Config validation rejects
http://for public/remote backends, so an API key is never
sent in plaintext; localhost and LAN backends are unaffected (#5). - Keyboard navigation — ↑/↓ move through the request list (#6).
- "Add backend" is now a picker of known backends (OpenAI, Anthropic, Ollama, vLLM,
llama.cpp, LM Studio, …) that prefills URL, type, and auth env var (#9). - First-run guidance when Ollama isn't reachable, pointing you to add a backend (#11).
Changed
- Clearer label and help text for the streamed-token-usage setting (#10).
0.1.0 — 2026-08-29
First public release of Vessel: a local-first, single-binary reverse proxy for LLM
traffic. It captures and searches OpenAI, Anthropic, Ollama, and raw traffic; provides
live metrics, replay and Compare; includes a read-only MCP endpoint; and ships native
Windows, Linux, and macOS archives plus a GHCR container image.
v0.1.0
Changelog
All notable changes are documented here. Vessel follows Semantic Versioning.
0.1.0 — 2026-08-29
First public release of Vessel: a local-first, single-binary reverse proxy for LLM
traffic. It captures and searches OpenAI, Anthropic, Ollama, and raw traffic; provides
live metrics, replay and Compare; includes a read-only MCP endpoint; and ships native
Windows, Linux, and macOS archives plus a GHCR container image.