Skip to content

Collector data reference

Collectors send JSON to POST /api/collector/device/events, authenticated with the machine’s collector token. The platform writes each event to a shield360_collector_* table in the tenant’s ClickHouse database, stamping database_config_id and collector_id from the token.

Every table also carries the reporting person (user_name), host, and event time. You can query these tables directly from custom dashboards and from Otter.

EventTableKey fieldsPolicy
shield360.collector.usageshield360_collector_usagerecord_id, tool, model, project, auth_type, plan, input, output and cache tokensAlways
shield360.collector.output_sessionshield360_collector_output_sessionssession_id, source, repo_path, lines_added, lines_removed, started_at, updated_atAlways
shield360.collector.app_activityshield360_collector_app_activityapp_id, app_name, seconds, samples, idle_secondsAlways
shield360.collector.app_spanshield360_collector_app_spansapp_id, app_name, started_at, ended_at, samplesAlways
shield360.collector.machine_stateshield360_collector_machine_statesstate (locked, away), started_at, ended_atAlways
shield360.collector.site_activityshield360_collector_site_activityservice, seconds, samplesBrowsing domains or full
shield360.collector.browsing_visitshield360_collector_browsing_visitsurl, browser, levelBrowsing full
shield360.collector.network_observationshield360_collector_network_observationsprocess, process_path, os_user, provider, key_fingerprintsNetwork observation (+ key fingerprints)
shield360.collector.heartbeatshield360_collector_heartbeatsmode, browsing_level, collector versionAlways
  • auth_type and plan say whether usage was billed per token or covered by a subscription, as the tool itself recorded it. They drive coverage in the spend report.
  • machine_state separates locked (on, showing a login window or screensaver) from away (no samples at all: asleep, off, or the collector not running). It doesn’t try to tell apart asleep, off and stopped, because from outside they’re indistinguishable.
  • Network observations have no byte or token counts by design. They’re an attribution signal, joined against what the provider billed.

Coding-agent hooks send OpenTelemetry traces, metrics and logs through the device-authenticated gateway, so developer machines never need a platform API key:

POST /api/collector/device/otlp/v1/traces
POST /api/collector/device/otlp/v1/metrics
POST /api/collector/device/otlp/v1/logs

These land in the standard OpenTelemetry tables and power Coding Agents.