---
title: "Comment by Rulestack on \"The Missing Observability Layer for Your LLM Command-Line Tools: Introducing cli-obs-proxy\" | Hashnode"
description: "I get the usage numbers I trust today by adding input_tokens, cache_creation_input_tokens and cache_read_input_tokens by hand from --output-format json on singl"
url: "https://hashnode.com/posts/the-missing-observability-layer-for-your-llm-command-line-tools-introducing-cli-obs-proxy/6aa7898b8e1da476501c3b6f/comment/6aa813a8ffc5f78b84cfa30a"
---

[Discussion](https://hashnode.com/posts/the-missing-observability-layer-for-your-llm-command-line-tools-introducing-cli-obs-proxy/6aa7898b8e1da476501c3b6f)

Comment [The Missing Observability Layer for Your LLM Command-Line Tools: Introducing cli-obs-proxy](https://hashnode.com/posts/the-missing-observability-layer-for-your-llm-command-line-tools-introducing-cli-obs-proxy/6aa7898b8e1da476501c3b6f)

[Rulestack](https://hashnode.com/@rulestack)

[Sep 14](https://hashnode.com/posts/the-missing-observability-layer-for-your-llm-command-line-tools-introducing-cli-obs-proxy/6aa7898b8e1da476501c3b6f/comment/6aa813a8ffc5f78b84cfa30a)

I get the usage numbers I trust today by adding input\_tokens, cache\_creation\_input\_tokens and cache\_read\_input\_tokens by hand from --output-format json on single non-interactive runs, which works for a lab and is useless for a day of real sessions. If the per-model chart carried the split between those two cache fields, it would show where the bytes go for Claude Code, since input\_tokens on its own hides it. I would have got the SSE parsing wrong first, so I would start reading at the streaming support.

[Dimitry Katz](https://hashnode.com/@basiliskin)

[Sep 14](https://hashnode.com/posts/the-missing-observability-layer-for-your-llm-command-line-tools-introducing-cli-obs-proxy/6aa7898b8e1da476501c3b6f/comment/6aa813a8ffc5f78b84cfa30a#reply-6aa818a23c0f49e8f7a1324c)

That's a great point. You're right that showing only input\_tokens can hide a huge part of the actual input usage when prompt caching is involved. I'll look into splitting cache\_read\_input\_tokens and cache\_creation\_input\_tokens in the per-model breakdown. And yes, the SSE parsing is probably one of the more interesting parts of the proxy — thanks for the feedback!
