How to track GitHub Copilot usage across a team
To track GitHub Copilot usage across a team, start with GitHub's own reporting: since June 2026 the Copilot usage metrics API reports the AI credits each user consumed per day. Use a local collector when you also need the split by model and repository, or Copilot beside Claude Code and Codex on one page. In Kibble, Copilot cost is a list-price token estimate from the session logs Copilot CLI and VS Code already write, never a GitHub invoice import.
What does GitHub already provide?
GitHub changed how Copilot is billed on 1 June 2026. A seat now includes a monthly allowance of AI credits equal to its price, $19 on Business and $39 on Enterprise, and everything past the allowance is charged by tokens at a published rate per model, one credit being one US cent, if an administrator allows additional usage at all. Budgets can be set at the enterprise, cost-center and user level. Code completions and next edit suggestions stay unlimited and consume no credits. The sources are GitHub's announcement of 27 April 2026 and its models and pricing page, both read on 10 September 2026.
For visibility, the Copilot usage metrics API added an ai_credits_used field on 19 June 2026, per user per day, in the one-day and 28-day user reports for organizations and enterprises. GitHub describes it as a metrics signal for analysing consumption rather than a billed total, and it is not broken down by feature, model or surface. Organization owners and enterprise administrators can read it.
| Question | GitHub's reporting | A local collector |
|---|---|---|
| Who consumed the most this month? | ai_credits_used per user per day | Estimated cost per member from local counters |
| Which model drove it? | Not broken down by model | Tokens and estimated cost per model per day |
| Which repository? | No | Repository names, resolved from the working directory on the machine |
| Terminal or editor? | Not broken down by surface | Copilot CLI and VS Code chat read separately, then summed |
| Copilot beside Claude Code and Codex? | Copilot only | One page, one agent filter, the same estimate method |
| What did GitHub bill? | The billing page, per invoice | Never; an estimate is not a bill |
Kibble's role is a combined local-usage view across the agents a team runs. It does not replace GitHub's usage metrics, budgets or invoices, and it has no import of them today.
How do you connect a machine running Copilot?
Use Node.js 20 or later on a machine that already has Copilot CLI sessions or Copilot Chat history in VS Code. Nothing needs switching on in Copilot: no telemetry setting, no OpenTelemetry exporter, no extension. Sign in to Kibble with Google, then run:
npm install -g @usekibble/cli
kibble login
kibble schedule status
kibble login opens a browser and links the machine to your own member identity. When your organization has automatic collection on, login sends usage straight away and schedules the hourly and startup pushes; the first sync imports today and the preceding 29 UTC days, wherever the local logs still exist. kibble push sends now, and kibble push --dry-run prints exactly what would be sent without sending it. The setup guide covers policy settings and the status commands.
Two environment variables matter when Copilot is not in the default place. COPILOT_HOME moves Copilot CLI's whole directory, and Kibble reads the same variable. If VS Code runs with --user-data-dir, set KIBBLE_VSCODE_USER_DATA_DIR to that directory; a portable VS Code is found through VSCODE_PORTABLE. The stable and Insiders builds are both read, on macOS, Windows and Linux.
For a team, an owner upgrades to Pro, invites engineers at their verified email addresses and assigns teams. Every engineer links their own machines; a shared login would make the per-engineer breakdown meaningless.
What does the Copilot collector see?
The adapters are public in Kibble's source: copilot.ts reads Copilot CLI's durable counters from ~/.copilot/session-state/<id>/events.jsonl, and vscode.ts reads the chat session stores under the editor's user-data directory. Both take a short allowlist of counters and names from each record and nothing else: the prompt, the reply, tool arguments and output, and the paths of edited files sit in the same files, and the collector never reads those fields. Where GitHub Copilot keeps its usage logs walks both formats field by field.
| Question | Kibble's Copilot view |
|---|---|
| How much did a member use? | Daily token totals and estimated cost across their linked machines, CLI and editor added together |
| Which models? | Model names as recorded, including the model behind VS Code's Auto choice; cost at list rates |
| Which repositories? | Checkout names from the working directory; a multi-root VS Code window stays unattributed |
| Which skills and MCP servers? | Copilot CLI: skill invocations by name, and whether the person or the model invoked them; MCP server names from tool calls. VS Code: explicit skill, slash-command and MCP server names |
| How is the machine billed? | Subscription when a GitHub login is saved, API or cloud when a provider is configured explicitly; the tier is unknown |
| What did GitHub bill? | No import; read the billing page |
| What was the prompt or the code? | Not sent |
An owner sees member totals, a manager sees the teams they were assigned, and a member sees themself. Names, counts and the billing mode leave the machine; prompts, code, tool arguments, paths and the GitHub login do not. The privacy policy is the field boundary.
What does the collector not cover?
- Inline completions and next edit suggestions. They are not chat requests, leave no counter behind, and consume no credits either.
- The cloud coding agent and Copilot code review. They run on GitHub's side and leave nothing on the laptop. GitHub attributes their credits to the person who asked, or to the pull request's author.
- A CLI session that is still open, or that crashed before its shutdown checkpoint. Its tokens are unknown, not zero, until the session ends and writes one.
- Older VS Code records that kept only the last model call of a multi-round request. They are flagged incomplete, never multiplied up to a guessed total, and a measurement the editor did not save is reported as unavailable rather than as zero.
- The seat tier and price. A saved login says subscription and nothing more, so no seat price is shown beside Copilot.
- Sessions in a remote workspace. They belong to the remote machine's collector.
How do you read Copilot beside Claude Code and Codex?
- Check who reported and whether the scheduled pushes are healthy. Missing data is not zero usage.
- Filter the same date range by agent. All three are priced by the same method from the same pinned rate table, so the comparison is like for like, and all three are estimates.
- Look at Copilot by model. On GitHub's rate card the default GPT-5.6 Luna costs a tenth of Claude Sonnet 5 per input token, so a model switch moves cost without moving tokens.
- Use the repository cut to find the change worth a conversation, not to allocate the credit bill to the cent.
- Put the estimate beside GitHub's
ai_credits_usedfor the same people and days. They will not match exactly, and the gap is the reading: a surface the collector cannot see, cache accounting, or a machine that has not reported.
The personal plan keeps 30 days of history; Pro keeps everything received. The cost article prices three labelled scenarios in credits. Estimated against billed is the rule that keeps the two columns apart, and the usage-log guide explains why a token count is not yet a cost.
Kibble shows Claude Code, Codex and GitHub Copilot usage across your team. Counts, never content.
Start free- Where GitHub Copilot keeps its usage logs, and how to count them
- How much does GitHub Copilot cost per engineer per month?
- Codex usage dashboard for teams: how to see Codex usage on every machine
- How to see Claude Code cost per engineer, without reading anyone's prompts
- Compare Kibble, local tools and gateways
- Set up the collector and check reporting