Data Collected
What we do NOT collect
We do not collect the content of your conversations — no prompts, no model responses, no raw
API bodies, and no tool results/output. Content capture is disabled in
every supported tool: log_user_prompt = false for Codex, captureContent: false for Copilot
in VS Code, OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=false for Copilot CLI and the
macOS desktop app, and for Claude Code OTEL_LOG_USER_PROMPTS=0, OTEL_LOG_ASSISTANT_RESPONSES=0,
OTEL_LOG_RAW_API_BODIES=0, and OTEL_LOG_TOOL_CONTENT=0.
One exception applies to Claude Code tool inputs — see the caution below.
What we do collect
Metadata about each AI call — enough to measure usage, not to reconstruct the conversation:
model, token counts, cost, latency, your enduser.id, and which tools and skills were invoked.
Claude Code runs with OTEL_LOG_TOOL_DETAILS=1, so in addition to tool names and outcomes it
records tool input parameters — bash command strings, file paths, search patterns, URLs,
skill / MCP / workflow / subagent names, and JSON-serialized tool arguments (individual values
truncated at ~512 characters, full payload bounded to ~4 KB). It does not record tool
results/output (OTEL_LOG_TOOL_CONTENT=0).
Because those arguments are captured, they can themselves contain snippets of file content or
prompt-like text — for example the content written by a Write, the old_string/new_string
of an Edit, or the prompt passed to a delegated agent. The truncation limits above bound how
much is captured, but short files or snippets can be recorded in full. Codex and Copilot do not
emit this tool-parameter detail — they report call-level metadata only.
| Field | Meaning | Example |
|---|---|---|
service.name | Which assistant emitted the data | claude-code, codex, copilot-chat |
gen_ai.system | Model vendor | anthropic, openai, github |
gen_ai.request.model | Model used | claude-sonnet-4-6, gpt-5-codex, gpt-4o |
gen_ai.operation.name | Kind of call | chat |
enduser.id | Who (your Aliz email) | jane.doe@aliz.ai |
gen_ai.usage.input_tokens | Prompt/context tokens | 1843 |
gen_ai.usage.output_tokens | Generated tokens | 412 |
| cost | Spend for the call (Claude/Codex); Copilot reports a premium-request multiplier, not USD | 0.0091 |
| duration | Call latency (ms) | 2140 |
| tool / skill usage (Claude Code) | Tool/skill name, outcome, and input parameters (bash commands, file paths, patterns, URLs, args) — but not results/output | tool Bash ran git status; skill code-review invoked |
| timestamp | When the call happened | 2026-07-29T09:14:22Z |
The collector normalizes these into shared gen_ai.* metrics so the three providers can be
compared side by side.
Sample records
These are representative of what lands in BigQuery. Note there is no prompt or response text — but for Claude Code, tool events carry the tool input (see the second record below).
Claude Code
Claude Code emits log events (e.g. api_request) plus tool-usage events. With
OTEL_LOG_TOOL_DETAILS=1, tool events include the input parameters:
{
"service.name": "claude-code",
"gen_ai.system": "anthropic",
"event.name": "api_request",
"gen_ai.request.model": "claude-sonnet-4-6",
"enduser.id": "jane.doe@aliz.ai",
"gen_ai.usage.input_tokens": 1843,
"gen_ai.usage.output_tokens": 412,
"cost_usd": 0.0091,
"timestamp": "2026-07-29T09:14:22Z"
}
{
"service.name": "claude-code",
"event.name": "tool_result",
"tool_name": "Bash",
"tool_input": "{\"command\":\"git status\",\"description\":\"Show working tree status\"}",
"success": true,
"enduser.id": "jane.doe@aliz.ai",
"timestamp": "2026-07-29T09:14:25Z"
}
OpenAI Codex
Codex emits spans; the LLM details live on the sampling-request span:
{
"service.name": "codex",
"gen_ai.system": "openai",
"span.name": "run_sampling_request",
"gen_ai.operation.name": "chat",
"gen_ai.request.model": "gpt-5-codex",
"enduser.id": "jane.doe@aliz.ai",
"gen_ai.usage.input_tokens": 2210,
"gen_ai.usage.output_tokens": 587,
"duration_ms": 3120,
"timestamp": "2026-07-29T09:20:03Z"
}
GitHub Copilot
Copilot (VS Code, CLI, and the macOS desktop app) emits chat spans, from which the collector
derives gen_ai.calls and gen_ai.duration:
{
"service.name": "copilot-chat",
"gen_ai.system": "github",
"gen_ai.operation.name": "chat",
"gen_ai.request.model": "gpt-4o",
"enduser.id": "jane.doe@aliz.ai",
"gen_ai.usage.input_tokens": 1502,
"gen_ai.usage.output_tokens": 240,
"duration_ms": 1875,
"timestamp": "2026-07-29T09:26:41Z"
}
Copilot CLI and the tested macOS desktop runtime both emit service.name=github-copilot;
the dashboard's copilot-cli label covers both. See the
attribution limitation for the verification
scope.
Exact field names vary a little by provider and by the version of each tool. The collector maps
provider-specific fields onto the shared gen_ai.* convention so they can be queried uniformly
in BigQuery. The samples above are illustrative of shape and content, not a byte-for-byte schema.