Watch an agent send calls with and without Perseus. Point it at your own local model to measure the token savings for real.
local endpoint· OpenAI-compatible /v1/chat/completions (Ollama, vLLM, LM Studio…)
no folder connected · paste below, or connect the demo/ folder
idle
Requests go straight from your browser to your endpoint. Enable CORS on the server (e.g. OLLAMA_ORIGINS=*) and prompt tokens are read from each response's usage.prompt_tokens. To generate the resolved context automatically, use the Claude Code setup snippet below.
price / 1M input · Jul 2026 list:
agent-session · perseus mcpcalls: 0
$ perseus mcp serve && agent run --loop
streaming calls…
Token reduction this session
94%
Without Perseus · estimated0 tok
With Perseus · measured A/B0 tok
Tokens saved
0
Spend avoided · est.
$0.00
Tool schema advertisedevery call
3× aliased
each tool tripled
→
advertised once
per tool, not aliased
~67%
smaller schema
Extrapolated to a 50-agent fleet · illustrative
$0.00 / year at the current rate
Methodology.
◐ Set it up with Claude Code· paste this to generate the real baseline / resolved contexts and enable CORS
Set up the Perseus live-efficiency demo in this repo:
1. Install and scaffold:
pip install perseus-ctx
perseus quickstart # detects the stack, writes .perseus/context.md
2. Produce the two contexts the demo compares, and print both:
• BASELINE (unresolved): the raw .perseus/context.md PLUS the full MCP tool
list an agent would otherwise carry every call → save to demo/baseline.txt
• RESOLVED (Perseus):
perseus render .perseus/context.md --output demo/resolved.txt
3. Serve a local OpenAI-compatible model with CORS on so the browser can call it:
• Ollama: OLLAMA_ORIGINS='*' ollama serve && ollama pull qwen2.5
endpoint → http://localhost:11434/v1/chat/completions
• vLLM: vllm serve <model> --port 8000 --allowed-origins '["*"]'
endpoint → http://localhost:8000/v1/chat/completions
4. Keep demo/baseline.txt and demo/resolved.txt in the demo/ folder, and tell me
the model name. (Re-run `perseus render` any time to refresh resolved.txt.)
Then in Live mode I'll click Connect folder → pick demo/, set the endpoint +
model, and hit Measure/Loop. With auto-refresh on, the demo re-reads both files
before every measurement · so regenerating them here flows straight through,
reading the real usage.prompt_tokens from my own model.