vessel

See what your agents are actually doing.

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…

Or install with a package manager
Homebrew — macOS (Apple Silicon) and Linux
brew trust spenceclark/tap && brew install spenceclark/tap/vessel
Scoop — Windows
scoop bucket add spenceclark https://github.com/spenceclark/scoop-bucket && scoop install vessel

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.

Find the one that went wrong

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.

Tag agents, name runs

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.

Replay, fan out, compare

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.

Score it, rank it, report it

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.

Ask your AI about it

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.

Quickstart
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"

How Vessel is different

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.

Vessel vs Langfuse (and Helicone, Phoenix, LangSmith)

Vessel vs LiteLLM (and other gateways)

Vessel vs mitmproxy / Charles / Proxyman

Vessel vs “just log it in my code”

Frequently asked questions

Does it change my requests?

No. Byte-for-byte, with only X-Vessel-* headers stripped. injectStreamUsage is the single opt-in exception, and it’s flagged on the row.

Where does the data go?

A SQLite file next to the config. Nothing leaves the machine; auth headers are redacted at rest; keys are never stored.

Which backends?

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.