Skip to content

[Feature Request] Streaming per-subagent token usage events during execution #987

Description

@ArielSmoliar

Problem

  • The SDK provides token usage in two places: RateLimitEvent.utilization (session-level, lagging) and model_usage in ResultMessage (per-agent, but only after completion). During
    execution, there's no way to observe how many tokens a specific subagent has consumed so far.

  • This makes it impossible to build real-time resource management on top of the SDK. You can set a static max_budget_usd kill switch, but you can't dynamically adjust agent behavior based on actual consumption mid-execution.

Proposal

Emit a TokenUsageEvent (or extend the existing RateLimitEvent) per subagent during execution:

{
"type": "token_usage",
"agent_id": "researcher-agent",
"input_tokens": 14200,
"output_tokens": 3800,
"cache_read_input_tokens": 600,
"cumulative_cost_usd": 0.042,
"turn": 3
}

This could be emitted after each LLM call within a subagent, similar to how RateLimitEvent is already streamed.

Use case

  • I'm building an open-source agent scheduler that sits above agent frameworks and manages resource allocation across concurrent agents.
  • The Anthropic SDK's hook architecture (PreToolUse/PostToolUse at zero token cost) is already the most scheduler-friendly integration point across all the major agent platforms I analyzed.
  • Streaming per-agent token usage would complete the picture by providing hooks for admission control and usage events for real-time accounting.

Concrete scenarios:

  • Throttle a subagent that's consuming disproportionate tokens before it hits max_budget_usd.
  • Downgrade a subagent to a cheaper model mid-execution if utilization patterns suggest the task is simpler than expected.
  • Rebalance max_turns across concurrent subagents based on actual vs. projected consumption.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions