<- blog

AI Coding Telemetry Belongs in Operations

GitHub's new Copilot controls make agent activity observable and enforceable. Route that telemetry into incident, cost, and release processes.

#ai-agents#observability#operations

GitHub shipped a cluster of Copilot governance updates on 8 July that change how teams should think about coding assistants. Administrators can now mandate OpenTelemetry export for Copilot in VS Code and Copilot CLI, including the OTLP endpoint, protocol, resource attributes, exporter headers, and whether prompt, response, and tool content is captured. The managed value wins over environment variables and user settings.

The same day, GitHub made managed Copilot settings deployable through MDM and file-based configuration, so Intune, Jamf, Group Policy, Chef, Puppet, Ansible, or a root-owned managed-settings.json can enforce the same policy across VS Code and the CLI. It also added live mobile notifications for remote Copilot CLI sessions, so operators can see when a remote agent session is in progress, waiting for input, idle, or finished.

Fresh evidence from GitHub points to the same operational direction: AI coding work is no longer just an editor feature. It is becoming managed endpoint software with telemetry, policy precedence, session state, and escalation paths.

The repeated angle to avoid

Recent posts here have covered agent audit trails, cost budgets, permission budgets, deploy dry runs, feature-flag targeting diffs, accessibility-tree contracts, and secret-surface monitoring. The easy version of this article would repeat the old X needs Y formula: AI coding needs observability.

The more useful angle is narrower. OpenTelemetry export and managed settings turn Copilot activity into enforceable operational data. That means teams need to decide which questions telemetry must answer, where sensitive content is allowed to flow, and which behaviours should trigger human review.

What changed in the control plane

The Copilot OTel update matters because it moves telemetry configuration out of individual developer shells. Before a managed control exists, teams often rely on local OTEL_* environment variables, optional editor settings, or after-the-fact usage reports. Those are useful, but they are weak controls for work that may inspect code, run commands, propose diffs, or interact with remote sessions.

Managed telemetry changes the shape of the system:

Control Practical effect Operator question
Managed OTLP endpoint Copilot telemetry goes to an approved collector Which team owns the collector and retention policy?
Managed resource attributes Events can carry team, device, repo, or environment labels Can incidents be traced back to the right context?
Managed exporter headers Collector authentication can be configured without leaking through tool subprocesses Are telemetry credentials separated from agent tools?
Prompt, response, and tool-content capture controls Sensitive payloads can be allowed, blocked, or governed centrally Which content classes are safe to collect?
MDM and file-based settings Policy follows the endpoint, not just the signed-in account Are CLI and editor behaviour consistent?
Mobile session states Remote work can request attention without being invisible Who responds when a session waits for input?

The important implementation detail is not that everything should be captured. It is that the decision should be explicit and centrally enforceable.

Separate observability from surveillance

A small web business does not need to turn every prompt into a permanent HR record. It does need enough evidence to answer operational questions when AI touches important systems.

Use different retention and sensitivity rules for different telemetry classes:

ai_coding_telemetry:
  session_metadata:
    retain: 180 days
    examples:
      - session id
      - user or service identity
      - repo and branch
      - start and finish time
      - waiting-for-input state
  tool_events:
    retain: 90 days
    examples:
      - command names
      - validation results
      - files read or changed
      - external systems touched
  content_payloads:
    retain: 7 to 30 days, only where approved
    examples:
      - prompt snippets
      - model responses
      - tool input and output excerpts
    never_collect:
      - secrets
      - customer records
      - payment data
      - private health, legal, or employment data

This keeps the operational value without creating a new pile of sensitive data. For many teams, metadata and tool events are enough. Full prompt and response capture should be a deliberate exception for high-risk debugging, audit, or regulated workflows.

Connect telemetry to release risk

Telemetry becomes useful when it changes a decision. For practical web engineering, the most valuable link is between an AI session and the release or business surface it may affect.

When a Copilot CLI session or editor agent touches a branch, the telemetry pipeline should make it possible to answer:

  1. Which repository, branch, and pull request did the session affect?
  2. Did it run tests, lint, builds, accessibility checks, or browser smoke tests?
  3. Did it inspect deployment logs, feature flags, environment settings, or analytics data?
  4. Did it attempt to change checkout, booking, quote, lead-routing, authentication, or payment code?
  5. Did it stop because it needed user input, hit a policy boundary, or failed validation?
  6. Which human reviewed the resulting change before production?

That turns AI coding from a black-box productivity story into a release-management input. A pull request that only edits copy can be reviewed lightly. A pull request created after an agent inspected production logs and changed lead-routing code deserves a stronger evidence block.

Use resource attributes as business labels

OpenTelemetry is only as useful as the labels attached to events. If every AI coding event arrives as generic editor telemetry, the collector will not tell an operator what changed.

For small teams, define a short resource-attribute map before turning on export:

Attribute Example value Why it helps
team growth, platform, support Routes alerts and review questions
repo shop-frontend Links sessions to code ownership
risk_band low, medium, high Separates copy edits from production-impacting work
work_lane checkout, booking, analytics, security Connects AI use to business functions
environment local, preview, production Distinguishes diagnosis from live changes
agent_surface vscode, cli, remote Shows where the work actually ran

The labels do not need to be perfect on day one. Start with the attributes that help you find risky work quickly. A local-service site may care most about booking and lead-routing. An ecommerce team may care most about checkout, product-page, pricing, and analytics.

Failure modes to plan for

Managed AI telemetry introduces its own risks. Plan for them before the collector fills up.

  • Over-collection: capturing prompt, response, and tool content by default may store secrets, customer data, or commercially sensitive plans.
  • Under-labeling: telemetry without repo, branch, risk, or work-lane labels becomes expensive noise.
  • Policy drift: editor settings, CLI settings, and remote sessions behave differently if the endpoint policy is not actually enforced across surfaces.
  • Credential leakage: telemetry exporter tokens must not become environment variables that child tools can read. GitHub's managed-header design is useful here because headers are not passed through to tool subprocesses.
  • Alert fatigue: every agent session cannot page a human. Alert only on meaningful state changes: waiting for input on a high-risk session, failed validation loops, production context access, or policy bypass attempts.

The goal is not perfect visibility. The goal is enough visibility to stop bad automation before it becomes a customer, security, or revenue problem.

A practical rollout checklist

Before enabling managed export broadly, run a small operational rollout:

  1. Pick one team or repo where AI coding is already common.
  2. Define the telemetry classes you will collect: metadata, tool events, content payloads, or a subset.
  3. Decide which content is never allowed in telemetry.
  4. Configure the OTLP endpoint and resource attributes through managed settings, not per-developer environment variables.
  5. Confirm the policy applies to both VS Code and Copilot CLI.
  6. Send the data to a collector with retention, access control, and deletion rules.
  7. Add dashboards for high-risk work lanes, failed validation, waiting-for-input sessions, and production-context access.
  8. Link agent-session evidence from pull requests, incidents, or release notes.
  9. Review the first week of data for noise, missing labels, and sensitive payload surprises.

This is also a good place to decide who is on call for stuck agent sessions. GitHub Mobile live notifications are useful only if somebody knows whether to approve, stop, or ignore the session asking for input.

The implementation consequence

AI coding telemetry should live beside the systems that already explain work: pull requests, CI, deployment records, incident timelines, security alerts, and cost reports. If it stays in a separate AI dashboard, it becomes novelty analytics.

The immediate operator move is to define a telemetry contract: what gets collected, how it is labeled, where it is stored, who can see it, and which events change release or incident behaviour. Once that contract exists, managed Copilot settings and OpenTelemetry export become more than enterprise checkboxes. They become the evidence layer that lets small teams use AI coding tools without losing sight of what the tools actually did.

Need technical help?

I'm a software engineer who builds web apps, APIs, and AI tooling. If you've got a project or a problem to talk through, book a free 30-minute call.

Book time with me ->