Drop-in capture
Change one base URL. Every request and response — streamed or not — captured byte-for-byte with timing, TTFT, and token counts. Unknown traffic passes through untouched.
vessel sits between your LLM clients and any backend — Ollama, OpenAI, Anthropic, or anything compatible. Change one base URL and every request is captured live: prompts, responses, timing, token counts. Search it, replay it across other models, score what comes back. One small binary. No account. Nothing leaves your machine.
Finding the latest release for your operating system…
brew trust spenceclark/tap && brew install spenceclark/tap/vessel
scoop bucket add spenceclark https://github.com/spenceclark/scoop-bucket && scoop install vessel
Change one base URL. Every request and response — streamed or not — captured byte-for-byte with timing, TTFT, and token counts. Unknown traffic passes through untouched.
Full-text search across prompts and responses. Filter by model, backend, or agent tag. Truncations, errors, cold model loads, and tool calls a model fumbled into plain text are badged, not buried.
Each agent sends its own tag and each run its own session — a header, a path prefix, or a LangGraph callback. Filter, compare, and report per agent, per run.
Re-send a captured request to a different backend or model — or to eight at once, or one model across a sweep of temperatures — and see every response beside the original with timing and token deltas.
Rate responses 1–5 as you compare; Reports ranks models and parameter sets by score and win rate, and charts tokens, tok/s, duration, cache efficiency, and warnings by model, tag, or backend. Export any filtered list to CSV or JSONL.
A built-in read-only MCP server lets Claude Code — or any MCP client — search and inspect your captured traffic directly. “Why did my agent stall?” is now a question you can just ask.
OLLAMA_HOST=127.0.0.1:4550 ollama run llama3.2
# or any SDK: base_url = "http://127.0.0.1:4550/b/openai/v1"
Vessel is a developer tool in the Fiddler / Wireshark family, not a telemetry platform: it watches the wire between your client and the model, and never touches the request.
No. Byte-for-byte, with only X-Vessel-* headers stripped. injectStreamUsage is
the single opt-in exception, and it’s flagged on the row.
A SQLite file next to the config. Nothing leaves the machine; auth headers are redacted at rest; keys are never stored.
Ollama native, any OpenAI-compatible server (LM Studio, llama.cpp, vLLM, OpenRouter, the OpenAI API itself), and Anthropic Messages. Unknown formats pass through and are stored raw.