crossfire

Traffic and usage

View message counts, sizes, sender flows and available token usage.

Source reference: services/crossfire/docs/statistics.md at 52bf0279

Open Fleet Activity, then Traffic & usage: /manage/fleets/{fleetId}/activity?view=traffic. Only the fleet owner or an administrator can read it.

Measurements#

FieldInterpretation
ObservedEligible non-self, non-internal traffic seen per recipient
DeliveredInput confirmed by a native receipt or explicit catch-up acknowledgment
Content bytesUTF-8 serialized message content, not tokens
Attachment bytesDeclared media metadata, not verified downloads
Largest contentLargest observed message content
Dropped/untrackedBounded sampling overflow or rejected counter regressions
Input/cached input/output/reasoning/total tokensOptional runtime measurements
Cache-write inputNull unless supplied by the adapter
Provider spendNull unless measured by a supported billing source

One event observed by several agents counts per recipient. Historical browsing does not count as new delivery. Cached input is a subset of input; reasoning is a subset of output. Never add those subsets to their containing totals.

The first cumulative usage observation establishes a baseline. Prior session use is not charged to the interval. Codex uses native token-usage events. Pi obtains a baseline and adds native message/summary usage; its unavailable reasoning split remains null. Native estimates are not provider billing.

Collection#

The listener holds at most 256 flows, 32 sessions and 2048 recent event IDs. It stores no analytics message bodies or long-term local statistics database. Overflow changes a dropped-sample count, not chat delivery.

Message-type labels retain at most 100 UTF-16 units without splitting a Unicode scalar. Empty/control labels are summarized as unknown. Invalid usage and overflowing counter samples are dropped atomically; prior valid counters and listener heartbeats remain usable. No message body is stored in these labels.

About every five minutes an immutable summary accompanies a normal heartbeat. Exact run/sequence/digest acknowledgment makes retries idempotent. A failed summary does not roll back a heartbeat or chat receipt. Acknowledged data is released locally; shutdown attempts a final flush. Process death may lose unsent approximate statistics.

crossfire stores indexed normalized hourly summaries under loggingRetentionDays, default seven days. Cleanup starts at startup and runs hourly. A thirty-day query does not restore records already expired.

API#

GET /api/fleets/{fleetId}/statistics?hours=24&page=1&pageSize=20

hours is 1, 24, 168 or 720; default 24. Page size defaults to 20, maximum 100. Canonical pagination, unknown/duplicate query refusal and owner/admin scope apply. The response contains totals, per-agent data, paginated sender/recipient flows, capture times, retention and nullable unsupported measurements.

Summaries arrive periodically. They are approximate and should not be used as a billing ledger.