What the wedge sends
This list is generated from the wire schemas the wedge is built against, not written by hand. If an engineer adds a field, it appears here or the build fails.
Never sent
- — Source code, diffs, file contents
- — Prompt or completion text
- — File names and paths (only salted hashes and the branch)
- — Screenshots, keystrokes, screen recordings
- — Clipboard, browser history, other applications
- — Microphone or camera
- — Time tracking outside episodes
The envelope, on every event
event_idstringRandom id of this event, assigned on the device; it makes a retry a duplicate instead of a second observation.schema_versionconstant "2.1"Version of the wire contract this event was built against.user_idstringYour Deigma user id. Not your GitHub login, not your email.sourceone of: "wedge_vscode", "wedge_cursor", "wedge_cli"Which wedge produced it: the VS Code / Cursor extension or the CLI.originone of: "live", "backfill"Whether the observation was made live or reconstructed from history at install.occurred_atstringWhen the thing happened on your machine.sent_atstringWhen it left your machine (they differ when you were offline).tool.namestringEditor or CLI name, e.g. "vscode".tool.versionstringThe version of that editor or CLI, so behaviour can be compared across releases.typeconstant "session.summary"Which of the four event types this is.model.familystringModel family you were working with, e.g. "claude".model.namestringModel name, e.g. "claude-sonnet-5".model.generation_tagstringCoarse generation label, used to compare like with like over time.
session.summary
session_idstringId of the session, so its events group together.duration_msintegerHow long the session lasted.requestsintegerHow many requests you made in it.iterationsintegerHow many back-and-forth iterations it took.tool_callsobjectCounts per tool name (read_file: 4, edit_file: 2) — names and counts, never arguments.tokens_inintegerTokens sent to the model, as the tool reports them.tokens_outintegerTokens received.prompt_features[].h_structnumberStructural entropy of the prompt — a number computed on your machine from text that never leaves it.prompt_features[].content_massnumberHow much of the prompt was content rather than boilerplate.prompt_features[].lengthintegerPrompt length in characters.prompt_features[].categorieslist of stringFlags from a fixed vocabulary ("test", "refactor", ...) — a closed enum, not your words.env_features.e_definition_versionconstant "E-1.0"Which definition of the environment score was used.env_features.mcp_tool_diversitynumberHow many distinct MCP tools you use, on a saturating scale.env_features.mcp_tool_callsintegerHow many tool calls the session made.env_features.project_instructions_loadedbooleanWhether project instructions were loaded — the fact, never their content.env_features.reusable_skill_callsintegerHow many reusable skills or commands were invoked.carrier_hint.providerconstant "github"Which forge the work belongs to (github).carrier_hint.repo_idintegerNumeric repository id, so the session can be tied to the right pull request.carrier_hint.branchstringThe branch name, which is how a session is tied to the pull request it belongs to.carrier_hint.pr_numberintegerPull request number.
draft.curation
draft_hashstringSalted SHA-256 of the AI draft. The salt stays on your device, so the hash is unusable to anyone else.final_hashstringSalted SHA-256 of what you actually kept.kc_valuenumberHow much of the draft survived your edits, 0..1.kc_algo_versionstringWhich algorithm measured that, because thresholds differ per algorithm.size_draftintegerLength of the draft in characters.size_finalintegerLength of what you kept.t_validation_msintegerHow long the draft was under review before you accepted it.n_scrollintegerHow many times you scrolled through it.n_editsintegerHow many edits you made to it.edit_kindone of: "accept", "light", "deep", "rewrite"A coarse label of that: accept / light / deep / rewrite.carrier_hint.providerconstant "github"Which forge the work belongs to (github).carrier_hint.repo_idintegerNumeric repository id.carrier_hint.branchstringThe branch name, which is how a draft is tied to the pull request it belongs to.carrier_hint.pr_numberintegerPull request number.
error.interception
draft_hashstringSalted hash of the draft you had accepted.fix_hashstringSalted hash of the text that replaced it.t_since_accept_msintegerHow long the accepted draft survived before you corrected it.kc_to_fixnumberHow much of it survived the correction.kc_algo_versionstringWhich algorithm measured that.size_fixintegerLength of the correction in characters.same_regionbooleanWhether the correction was in the same place as the draft.carrier_hint.providerconstant "github"Which forge the work belongs to (github).carrier_hint.repo_idintegerNumeric repository id.carrier_hint.branchstringThe branch name, which is how a correction is tied to the pull request it belongs to.carrier_hint.pr_numberintegerPull request number.defect_confirmed_byvalue (nullable)Filled in by the server later, from the pull request — empty when it leaves your machine.defect_kindone of: "commit", "pr_opened", "review_requested", "review_approved", "changes_requested", "ci_passed", "ci_failed", "merged", "closed", "reverted" (nullable)Same: assigned by the pipeline, not by the wedge.fixed_in_same_episodeboolean (nullable)Same: assigned by the pipeline.ifix_candidateboolean (nullable)Same: assigned by the pipeline.
wedge.status
kindone of: "heartbeat", "paused", "resumed", "error", "updated"Heartbeat, paused, resumed, error or updated.wedge_versionstringVersion of the wedge.error_codestring (nullable)A short code when something went wrong — never a message with your data in it.