You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: annotate automatic tools and exclude from fluency scoring (#529)
* feat: annotate automatic tools and exclude from fluency scoring
Add automaticTools.json with a curated list of tool IDs that Copilot calls
autonomously (file reads, codebase searches, error checks, confirmations, etc.).
These tools do not require user configuration and should not inflate fluency scores.
Changes:
- New vscode-extension/src/automaticTools.json: list of automatic tool IDs
- maturityScoring.ts: compute nonAutoToolCount and use it for tuStage/agStage
thresholds; evidence text now distinguishes intentional vs automatic tools
- webview/usage/main.ts: show 'auto' badge on automatic tools in tool tables
- cli/esbuild.js: include automaticTools.json in the bundled data files
- docs/FLUENCY-LEVELS.md: document the automatic vs intentional tool distinction
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: update fluency viewer thresholds and agent docs for automatic tools
- maturityScoring.ts getFluencyLevelData(): update threshold text in Agentic
and Tool Usage levels to say 'intentional tools' instead of 'unique tools',
and explain that automatic tools are excluded (Stage 1 description, Stage 2
now lists examples of intentional tools)
- .github/agents/tool-names.agent.md: add automaticTools.json as a key file,
add Automatic vs. Intentional Tools guidance section, update checklist
- sync-toolnames prompts (both copies): update constraints to also modify
automaticTools.json and classify new tools as automatic or intentional
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: .github/agents/tool-names.agent.md
+32-2Lines changed: 32 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,10 +15,12 @@ Trigger this agent when:
15
15
- New MCP tools appear in user session logs without display labels
16
16
- The sync-toolnames workflow detects new upstream tools from `microsoft/vscode-copilot-chat`
17
17
18
-
## Key File
18
+
## Key Files
19
19
20
20
**`src/toolNames.json`** — The single mapping file from raw tool identifiers to human-readable display names. Every tool the extension encounters gets looked up here; missing entries show as "Unknown" in the UI.
21
21
22
+
**`src/automaticTools.json`** — An array of tool IDs that Copilot calls *automatically* on its own (file reads, directory listings, searches, error checks, confirmations, memory, etc.). These tools are excluded from fluency scoring because they don't reflect intentional user configuration. When adding new tool entries to `toolNames.json`, you **must also decide** whether each tool is automatic or intentional and add it to `automaticTools.json` if automatic.
23
+
22
24
## MCP Tool Name Conventions
23
25
24
26
MCP tools follow predictable naming patterns. The raw tool identifier encodes the MCP server origin and the action:
@@ -95,7 +97,34 @@ Use these repos to look up tool definitions when needed:
**Rule of thumb:** If the user must explicitly enable, configure, or consciously invoke the tool, it's intentional. If the agent just uses it as background context gathering, it's automatic.
120
+
121
+
## Editing `src/automaticTools.json`
122
+
123
+
- The file is a plain JSON array of tool ID strings
124
+
- Add new entries at the end of the array (before the closing `]`)
125
+
- Keep related tool variants together (e.g., all variants of `read_file`)
126
+
127
+
99
128
100
129
### Style Rules
101
130
@@ -124,5 +153,6 @@ The `sync-toolnames` workflow (`.github/workflows/sync-toolnames.yml`) automatic
124
153
-[ ] For MCP tools, match the prefix to a known server or research the source
125
154
-[ ] Generate friendly names following the conventions above
126
155
-[ ] Add entries to `src/toolNames.json` in the correct location
156
+
-[ ] For each new tool, decide if it is **automatic** or **intentional** — add automatic tools to `src/automaticTools.json`
127
157
-[ ] Run `npm run compile` to validate
128
158
-[ ] Run `npm run test:node` to confirm tests pass
Copy file name to clipboardExpand all lines: .github/prompts/sync-toolnames.prompt.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,7 +40,8 @@ Scan `microsoft/vscode-copilot-chat` repo for model-facing tool identifiers, com
40
40
8. Also print (as plain text, after the delta or NO_DELTA) the upstream commit SHA used for the scan and the exact file path scanned in upstream, for traceability.
41
41
42
42
## Constraints
43
-
- Only modify our toolNames.json file.
43
+
- Only modify `toolNames.json` and `automaticTools.json`.
44
44
- Do not open a PR.
45
45
- Do not include tools in the list that are not model-facing (only those defined in upstream `ToolName` / `ContributedToolName` string values).
46
46
- Be resilient to minor refactors (enum order changes, added comments, etc.).
47
+
- For each new tool added to `toolNames.json`, also determine if it is **automatic** (agent calls it on its own: file reads, searches, error checks, confirmations) or **intentional** (user configures it: terminal execution, file editing, websearch, MCP tools). Add automatic tools to `automaticTools.json`.
Copy file name to clipboardExpand all lines: .github/workflows/prompts/sync-toolnames-prompt.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,7 +34,8 @@ Scan `microsoft/vscode-copilot-chat` repo for model-facing tool identifiers, com
34
34
8. Also print (as plain text, after the delta or NO_DELTA) the upstream commit SHA used for the scan and the exact file path scanned in upstream, for traceability.
35
35
36
36
## Constraints
37
-
- Only modify our toolNames.json file.
37
+
- Only modify `toolNames.json` and `automaticTools.json`.
38
38
- Do not open a PR.
39
39
- Do not include tools in the list that are not model-facing (only those defined in upstream `ToolName` / `ContributedToolName` string values).
40
40
- Be resilient to minor refactors (enum order changes, added comments, etc.).
41
+
- For each new tool added to `toolNames.json`, also determine if it is **automatic** (agent calls it on its own: file reads, searches, error checks, confirmations) or **intentional** (user configures it: terminal execution, file editing, websearch, MCP tools). Add automatic tools to `automaticTools.json`.
- Multi-file edit sessions detected → at least Stage 2
72
72
- Average 3+ files per edit session → at least Stage 3
73
73
- 20+ multi-file edits with average 3+ files per session → Stage 4
74
74
75
+
> **Note:** Only *intentional* tools count toward the unique tool thresholds — tools that Copilot calls automatically (file reads, searches, error lookups, confirmations, memory, etc.) are excluded. See [Automatic vs. Intentional Tools](#automatic-vs-intentional-tools) below.
76
+
75
77
---
76
78
77
79
### 4. 🔧 Tool Usage
@@ -80,15 +82,39 @@ Measures breadth and depth of tool integration, including MCP servers.
80
82
81
83
| Stage | Criteria |
82
84
|-------|----------|
83
-
| 1 | No tools used |
84
-
| 2 | At least 1 unique tool used |
85
+
| 1 | No intentional tools used |
86
+
| 2 | At least 1 intentional tool used |
85
87
| 3 | 2+ advanced tools used, **or**`@workspace` agent sessions detected, **or** any MCP server usage |
86
88
| 4 | 2+ MCP servers used |
87
89
88
90
**Recognised advanced tools:** GitHub Pull Request, GitHub Repository, Run In Terminal, Edit Files, List Files
89
91
92
+
> **Note:** Only *intentional* tools count toward Stage 2. Automatic tools are still shown in the tool-usage table with an `auto` badge, but are not counted for scoring. See [Automatic vs. Intentional Tools](#automatic-vs-intentional-tools) below.
93
+
90
94
---
91
95
96
+
### Automatic vs. Intentional Tools
97
+
98
+
Copilot calls many tools on its own during agentic sessions to gather context — reading files, searching the codebase, checking errors, etc. These are called **automatic tools** and do **not** count toward fluency scoring because they do not reflect deliberate configuration choices by the user.
99
+
100
+
**Automatic tools** (excluded from fluency scoring):
/** Format a number with thousand separators for display. */
13
18
functionfmt(n: number): string{
@@ -195,7 +200,7 @@ export function getFluencyLevelData(isDebugMode: boolean): {
195
200
label: "Stage 3: AI Collaborator",
196
201
description: "Regular use of agent mode with diverse tools",
197
202
thresholds: [
198
-
"At least 10 agent-mode interactions AND 3+ unique tools used OR",
203
+
"At least 10 agent-mode interactions AND 3+ intentional tools used OR",
199
204
"Average 3+ files per edit session OR",
200
205
"Using edits agent for focused editing tasks",
201
206
],
@@ -209,7 +214,7 @@ export function getFluencyLevelData(isDebugMode: boolean): {
209
214
label: "Stage 4: AI Strategist",
210
215
description: "Heavy, strategic use of autonomous features",
211
216
thresholds: [
212
-
"At least 50 agent-mode interactions AND 5+ tool types used OR",
217
+
"At least 50 agent-mode interactions AND 5+ intentional tools used OR",
213
218
"At least 20 multi-file edits with 3+ files per session average",
214
219
"Demonstrates mastery of agent orchestration",
215
220
],
@@ -229,7 +234,7 @@ export function getFluencyLevelData(isDebugMode: boolean): {
229
234
label: "Stage 1: AI Skeptic",
230
235
description: "Not using tools beyond basic chat",
231
236
thresholds: [
232
-
"Zero unique tools used",
237
+
"Zero intentional tools used (automatic tools like file reads and searches are excluded)",
233
238
"No MCP servers configured",
234
239
"No workspace agent sessions",
235
240
],
@@ -243,8 +248,8 @@ export function getFluencyLevelData(isDebugMode: boolean): {
243
248
label: "Stage 2: AI Explorer",
244
249
description: "Beginning to use basic tools",
245
250
thresholds: [
246
-
"At least 1 unique tool used",
247
-
"Using basic agent mode tools",
251
+
"At least 1 intentional tool used (e.g. run_in_terminal, editFiles, websearch, MCP tools)",
252
+
"Automatic tools (file reads, searches, error checks) do not count",
248
253
],
249
254
tips: [
250
255
"Set up [MCP servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) to connect Copilot to external tools (databases, APIs, cloud services) — [▶ MCP with Azure and GitHub](https://tech.hub.ms/github-copilot/videos/mcp-with-azure-and-github)",
@@ -440,6 +445,7 @@ export function calculateFluencyScoreForTeamMember(fd: {
0 commit comments