[⌥] wire inspector
Data inspector.
Every leaf field that crosses the wire from your machine to our server, auto-generated from the live v0.8 Zod schema. If a field isn't in this table, it isn't collected — and the build breaks if it ever appears without a description.
Numbers, hashes, and known categoricals only.
Never prompts, code, file contents, or paths. Skill and tool names cross the wire (e.g. /plan, mcp__github__list_issues) — your prompts, files, and outputs do not. Independently verified: Claude audited the client against the privacy policy and ran its own leak probe against the real scanner.
Fields
Auto-generated from the v0.7 wire schema (64 leaf fields). Paths use dot notation; [] indicates an array element.
| Path | Type | Req | Description |
|---|---|---|---|
| device.device_id | string | yes | Stable UUIDv4 minted by the client at first run. Identifies this physical install, not the user. |
| device.client_version | string | yes | CLI version string that produced this payload. |
| device.extracted_at_ms | number | yes | Unix epoch ms when the extractor ran. Used to detect stale payloads. |
| device.window_days | number | yes | Number of days the extractor looked back over (Wave 1: 30). |
| device.schema_version | literal "0.8" | yes | Wire-format version. Drives the Zod union and which fields are required. |
| config.mcp_servers | number | yes | Number of distinct MCP servers configured. |
| config.hooks | number | yes | Number of distinct user hooks configured. |
| config.custom_commands | number | yes | Number of user-defined slash commands. |
| config.global_claude_md_lines | number | yes | Line count of the global ~/.claude/CLAUDE.md memory file. |
| config.global_agents_md_lines | number | no | Line count of the Codex instruction file <codex_home>/AGENTS.md (v0.12). |
| config.project_claude_md_lines_avg | number | yes | Average line count of per-project CLAUDE.md files. |
| config.plugin_count | number | no | Number of installed Claude Code plugins (v0.7). |
| sessions[].session_hash | string | yes | Stable 16-char hex hash of the session file (privacy-preserving id). |
| sessions[].project_hash | string | yes | 16-char hex hash of the project directory (privacy-preserving id). |
| sessions[].started_at_ms | number | yes | Unix epoch ms when the session began. |
| sessions[].ended_at_ms | number | yes | Unix epoch ms when the session ended. |
| sessions[].provider | unknown | no | The coding agent that produced this session — `claude` or `codex`. Omitted for Claude sessions (treated as `claude`); a closed-set categorical, never transcript content. |
| sessions[].distinct_skills[] | string | yes | Single skill name string, e.g. `/plan`. |
| sessions[].distinct_mcp_tools[] | string | yes | Single MCP tool name string, e.g. `mcp__github__list_issues`. |
| sessions[].distinct_builtin_tools[] | string | yes | Single built-in tool name string, e.g. `Read`. |
| sessions[].hitl_minutes | number | yes | Minutes the user was actively at-keyboard (HITL = human-in-the-loop). |
| sessions[].afk_minutes | number | yes | Minutes the session had agents running while the user was AFK. |
| sessions[].idle_minutes | number | yes | Minutes with no activity (neither HITL nor agent runs). |
| sessions[].afk_parallel_minutes_foreground | number | yes | Cumulative agent-minutes leveraged in the foreground while AFK. |
| sessions[].cron_parallel_minutes | number | yes | Cumulative cron-driven agent-minutes leveraged while AFK. |
| sessions[].afk_max_streak_minutes | number | yes | Longest continuous AFK block (minutes) within this session. |
| sessions[].afk_intervals[].start_minute | number | yes | Inclusive minute offset within the session where this AFK block starts. |
| sessions[].afk_intervals[].end_minute_exclusive | number | yes | Exclusive minute offset where this AFK block ends. |
| sessions[].afk_intervals[].is_cron | boolean | yes | True if this AFK block was driven by a cron-style scheduled run. |
| sessions[].strong_plan_signals[] | string | yes | Single strong plan-signal token string. |
| sessions[].weak_plan_signals[] | string | yes | Single weak plan-signal token string. |
| sessions[].is_planned | boolean | yes | Pre-computed flag: did this session ship with a plan? |
| sessions[].files_modified | number | yes | Distinct files edited via Write/Edit/MultiEdit/NotebookEdit. |
| sessions[].total_lines_edited | number | yes | Total non-whitespace lines added or removed. |
| sessions[].is_significant_edit_session | boolean | yes | Pre-computed: did this session cross the significant-edit threshold? |
| sessions[].revert_count | number | yes | Number of detected revert events (file restore / git checkout). |
| sessions[].qualifying_pairs | number | yes | Count of long-prompt pairs eligible for repetition checks. |
| sessions[].repetitive_pairs | number | yes | Subset of qualifying pairs flagged as repetitive by edit-distance. |
| sessions[].rage_quit_event | boolean | yes | True if session ended with frustration + tool errors + >=30min gap. |
| sessions[].tool_error_count | number | yes | Total is_error=true tool results in the session. |
| sessions[].auto_compaction_events | number | yes | Count of context-overflow auto-compactions triggered. |
| sessions[].total_input_tokens | number | yes | Sum of input_tokens across assistant turns. Used for normalisation. |
| sessions[].total_output_tokens | number | yes | Sum of output_tokens across assistant turns. |
| sessions[].redundant_approvals_per_signature | record<string, number> | yes | Dict of {signature_hash → overflow count} above the trust threshold. |
| sessions[].assistant_msgs_by_model | record<string, number> | yes | Dict of {model_id → assistant message count} for variety/freshness. |
| sessions[].user_skill_invocations | number | yes | Count of `/slash` skill invocations in user messages. |
| sessions[].hitl_mcp_invocations | number | yes | Count of `mcp__*` tool calls during HITL minutes. |
| sessions[].cache_input_tokens | number | yes | Cache HIT input tokens (cheap re-read) — sum from Anthropic usage block (v0.7). |
| sessions[].cache_creation_input_tokens | number | yes | Cache MISS / creation input tokens (full price) — sum from Anthropic usage block (v0.7). |
| sessions[].builtin_tool_invocations | number | yes | Total count of built-in tool_use blocks (Read, Write, Edit, Bash, ...) (v0.7). |
| sessions[].plugin_invocations | number | yes | Count of `<command-name>` plugin-command markers in user messages (v0.7). |
| sessions[].agent_dispatches | number | yes | Count of `Task` tool_use blocks (subagent spawns) in this session (v0.7). |
| sessions[].tokens_by_model | record<string, number> | yes | Per-model precise token split: { model_id → { input_miss, input_hit, output } } (v0.8). Sums equal cache_creation_input_tokens, cache_input_tokens, and total_output_tokens respectively. |
| sessions[].top_afk_streaks[].start_ts_ms | number | no | Start of one long agent (AFK) run (epoch ms). |
| sessions[].top_afk_streaks[].end_ts_ms | number | no | End of one long agent (AFK) run (epoch ms). |
| sessions[].top_afk_streaks[].active_minutes | number | no | Active agent minutes in that run (intra-run idle gaps excluded). |
| sessions[].top_afk_streaks[].turn_count | number | no | Number of agent turns in that run. |
| sessions[].skill_invocations_by_name | record<string, number> | no | Dict of {skill name → invocation count}, e.g. {"/plan": 3}. Names only. |
| sessions[].mcp_invocations_by_name | record<string, number> | no | Dict of {MCP tool name → invocation count}, e.g. {"mcp__github__list_issues": 2}. Names only. |
| sessions[].plugin_invocations_by_name | record<string, number> | no | Dict of {plugin name → invocation count}. Plaintext plugin names only, no inputs. |
| sessions[].commit_count | number | no | Number of `git commit` invocations counted from this session's transcript (drives the Output score; no GitHub fetch). |
| sessions[].hitl_tool_minutes | number | no | Display-only: portion of HITL minutes that occurred inside tool-call runtime. |
| sessions[].afk_tool_minutes | number | no | Display-only: portion of AFK minutes that occurred inside tool-call runtime. |
| sessions[].afk_dispatch_minutes | number | no | Portion of AFK minutes inside Agent/Task subagent-dispatch intervals — subtracted from the leverage numerator; does not affect the longest run. |
Example payload
Synthetic — all hashes and numbers below are placeholders. The shape matches what a real upload contains.
{
"device": {
"device_id": "00000000-0000-4000-8000-000000000001",
"client_version": "0.8.0",
"extracted_at_ms": 1700000000000,
"window_days": 30,
"schema_version": "0.8"
},
"config": {
"mcp_servers": 3,
"hooks": 2,
"custom_commands": 5,
"global_claude_md_lines": 120,
"project_claude_md_lines_avg": 40,
"plugin_count": 2
},
"sessions": [
{
"session_hash": "aabbccddeeff0011",
"project_hash": "1122334455667788",
"started_at_ms": 1699900000000,
"ended_at_ms": 1699903600000,
"distinct_skills": [
"/plan"
],
"distinct_mcp_tools": [
"mcp__github__list_issues"
],
"distinct_builtin_tools": [
"Read",
"Edit",
"Bash"
],
"hitl_minutes": 30,
"afk_minutes": 25,
"idle_minutes": 5,
"afk_parallel_minutes_foreground": 25,
"cron_parallel_minutes": 0,
"afk_max_streak_minutes": 25,
"afk_intervals": [
{
"start_minute": 30,
"end_minute_exclusive": 55,
"is_cron": false
}
],
"strong_plan_signals": [
"ExitPlanMode"
],
"weak_plan_signals": [],
"is_planned": true,
"files_modified": 3,
"total_lines_edited": 42,
"is_significant_edit_session": true,
"revert_count": 0,
"qualifying_pairs": 4,
"repetitive_pairs": 1,
"rage_quit_event": false,
"tool_error_count": 2,
"auto_compaction_events": 0,
"total_input_tokens": 4500,
"total_output_tokens": 1200,
"redundant_approvals_per_signature": {
"0a1b2c3d": 1
},
"assistant_msgs_by_model": {
"claude-sonnet-4-6": 18,
"claude-opus-4-7": 2
},
"user_skill_invocations": 1,
"hitl_mcp_invocations": 1,
"cache_input_tokens": 12000,
"cache_creation_input_tokens": 3500,
"builtin_tool_invocations": 14,
"plugin_invocations": 2,
"agent_dispatches": 1,
"tokens_by_model": {
"claude-sonnet-4-6": {
"input_miss": 3150,
"input_hit": 10800,
"output": 1080
},
"claude-opus-4-7": {
"input_miss": 350,
"input_hit": 1200,
"output": 120
}
}
}
]
}