A monthly API invoice tells you one thing: total spend. It cannot tell you that a 4,000-token CLAUDE.md, reloaded on 3,000 tasks, is responsible for a meaningful share of the bill while a carefully written review skill costs almost nothing because it fires only when someone asks for a review. That asymmetry is the whole point of instrumenting the agent rather than reading the invoice.
The architectural reason the asymmetry exists is progressive disclosure. Agent Skills split content into layers: a name and description in YAML frontmatter that gets loaded at startup, a SKILL.md body loaded only when the skill triggers, and bundled resources loaded only when referenced. The Claude platform documentation puts the metadata cost at roughly 100 tokens per skill, with the instructions body typically under 5,000 tokens and resource files costing nothing until they are read (Claude Agent Skills overview). The open specification describes the same staged model and recommends keeping the main skill file under 500 lines so that bulk reference material lives in separate files (Microsoft Learn: Agent Skills).
That design only pays off if your agent actually behaves that way for the skills you install. A badly written description that matches too broadly turns an on-demand skill into an always-on one. A skill whose SKILL.md instructs the agent to "read REFERENCE.md first" pulls a large file into context on every triggering task. You cannot see either failure mode in an invoice. You can see both in a token log grouped by file path and load mode.
There is a second reason beyond cost. Context is a finite resource with diminishing returns, and recall accuracy degrades as context grows, a phenomenon often called context rot (Anthropic: effective context engineering). Token spend per file is a usable proxy for how much of that finite budget each file consumes. When you find the file that eats 40 percent of your prompt tokens, you have probably also found a file worth trimming for quality reasons, not just cost.



